On 28 Aug 2010, at 20:32, Anthony Smith wrote:
> Has anybody noticed validates_uniqueness_of missing in rails 3.0 rc2?
I''m not sure if this is a bug or I''m just doing something
wrong.
It''s still in there, as far as I can see. If it had been removed,
you''d get an error when you try to call
''validates_uniqueness_of''.
> Here''s what I''m doing.
>
> Class 1:
>
> class Title < ActiveRecord::Base
> validates_length_of :language, :is => 3
> validates_uniqueness_of :language, :scope => :book_id
> validate :language, :is_proper_language_code
>
> validates_presence_of :value
>
> belongs_to :book
>
> def is_proper_language_code
> errors.add(:base, "invalid language code") unless
!ISO_639::ISO_639_2.find{ |lang| lang[0] == self.language }.nil?
> end
> end
>
> Class 2:
>
> class Book < ActiveRecord::Base
> attr_accessible :titles
>
> validates_presence_of :titles
>
> has_many :titles
> end
>
> Spec:
>
> before(:each) do
> @valid_title_attributes = {:book_id => 1, :language =>
"eng", :value => "..."}
>
> @book = Book.new
> @book.titles.push(Title.new(@valid_title_attributes))
> end
>
> it "should not have multiple titles with same language attribute"
do
> @book.titles.clear
> @book.titles.push(Title.new(@valid_title_attributes))
> @book.titles.push(Title.new(@valid_title_attributes))
> @book.should_not be_valid
>
> @book.titles.clear
> @book.titles.push(Title.new(@valid_title_attributes))
> @book.should be_valid
> end
I assume the problem is that "@book.should_not be_valid" is failing?
The uniqueness validator works by querying the database for other matching
records. So if you''re just creating titles in memory, and not saving
them, the uniqueness validator won''t complain about them. Try changing
your ''Title.new''s to ''Title.create''.
Chris
--
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk+unsubscribe@googlegroups.com.
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en.