我有这个型号:
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
现在的问题是,如果我创建一个新的竞赛条目,它就会通过。 但是,如果我填写一个字段,即名称,那么它会出现错误!
为什么会这样?一切都空了就应该失败!
答案 0 :(得分:0)
当您使用accepts_nested_attributes_for
时,您可以在participants
记录的同时创建competition_entry
记录,因为传递给competition_entry.create
的哈希包含{ {1}}。当您仅传递名称时,它会验证要创建的参与者并因其没有participants_attributes
和surname
而失败。当您将所有字段留空时,行为应该相同,但这不是因为您明确设置了instrument
。
:reject_if => :all_blank
表示:reject_if => :all_blank
散列应该被忽略,如果它是participant_attributes
,当你没有填充任何字段时就会发生这种情况。然后发生的是创建blank?
而不尝试创建competition_entry
因为participant
被忽略了。