我在 Rails 2.3.5 中使用了accepts_nested_attributes_for,发现它在保存时进行了不必要的验证。在我的应用程序中,我有数千条记录,所以这是一个问题。
为了说明这一点,我准备了一个简单的例子。
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
$ 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
正如此示例所示,它不仅验证添加的孩子,还验证所有其他孩子。我错过了什么吗?如何避免进行所有这些验证?正如我之前指出的,这对于大型应用程序来说是一个真正的障碍。