rubenrails
2010-Jun-25 16:29 UTC
Parent model running validations on all existing children when using accepts_nested_attributes_for
In my application, a Language has many Phrases. I''m using
accepts_nested_attributes_for, so by updating the parent I also save
changes to associated phrases. Here my models:
class Language < ActiveRecord::Base
has_many :phrases
accepts_nested_attributes_for :phrases
end
class Phrase < ActiveRecord::Base
validates_presence_of :value
belongs_to :language
def before_validation
print "\nValidating: #{self.value}\n"
end
end
I was expecting Rails to only validate the phrase that is being
updated, here you can see it''s validating all of the existing phrases:
$ script/console
Loading development environment (Rails 2.3.5)>> lang = Language.first
=> #<Language id: 1, name:
"Italiano">>> lang.phrases
=> [#<Phrase id: 7, value: "Buona notte", language_id: 1>,
#<Phrase id: 10, value: "Ciao", language_id: 1>,
#<Phrase id: 11, value: "Prego", language_id: 1>]
>> lang.phrases_attributes = [{:id => "7", :value =>
"Buon giorno"}]
=> [{:value=>"Buon giorno",
:id=>"7"}]>> lang.save
Validating: Buon giorno
Validating: Ciao
Validating: Prego
=> true
Validating all phrases is a real problem in my app, as I have tens of
thousands; Is there a way to avoid this? Is this normal behavior for
Rails?
--
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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en.