0

我在 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

正如此示例所示,它不仅验证添加的孩子,还验证所有其他孩子。我错过了什么吗?如何避免进行所有这些验证?正如我之前指出的,这对于大型应用程序来说是一个真正的障碍。

4

1 回答 1

0

在收到 SDRuby 组的 Jason King 的建议后,我尝试更新到 2.3.18。这解决了问题

于 2013-05-03T03:25:11.257 回答