Rails 4嵌套验证不起作用

时间:2013-10-04 12:07:04

标签: ruby ruby-on-rails-4

我有这个型号:

class CompetitionEntry < ActiveRecord::Base
  has_many :participants
  has_one :address
  has_many :music_programs

  accepts_nested_attributes_for :address

  accepts_nested_attributes_for :participants, :music_programs,
    :allow_destroy => true,
    :reject_if     => :all_blank

end

和这一个:

class Participant < ActiveRecord::Base
  belongs_to :competition_entry
  has_one :birthplace

  validates :name, :surname, :instrument, presence: true
end

现在的问题是,如果我创建一个新的竞赛条目,它就会通过。 但是,如果我填写一个字段,即名称,那么它会出现错误!

为什么会这样?一切都空了就应该失败!

1 个答案:

答案 0 :(得分:0)

当您使用accepts_nested_attributes_for时,您可以在participants记录的同时创建competition_entry记录,因为传递给competition_entry.create的哈希包含{ {1}}。当您仅传递名称时,它会验证要创建的参与者并因其没有participants_attributessurname而失败。当您将所有字段留空时,行为应该相同,但这不是因为您明确设置了instrument

:reject_if => :all_blank表示:reject_if => :all_blank散列应该被忽略,如果它是participant_attributes,当你没有填充任何字段时就会发生这种情况。然后发生的是创建blank?而不尝试创建competition_entry因为participant被忽略了。