0

我有这个模型:

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

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

为什么会这样?当所有内容都为空时,它应该会失败!

4

1 回答 1

0

使用时,考虑到传递给contains的哈希accepts_nested_attributes_for,您可以在创建participants记录的同时创建记录。当您仅传递名称时,它会验证要创建的参与者并失败,因为它没有and 。当您将所有字段留空时,行为应该是相同的,但这不是因为您明确设置了.competition_entrycompetition_entry.createparticipants_attributessurnameinstrument:reject_if => :all_blank

:reject_if => :all_blank声明participant_attributes如果是 ,则应忽略哈希blank?,当您不填写任何字段时会发生这种情况。然后发生的事情是 acompetition_entry正在创建而没有尝试创建 aparticipant因为accepts_nested_attributes_for只是被忽略了。

于 2013-10-04T12:47:15.690 回答