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

ここでの問題は、新しいコンテスト エントリを作成すると、それが通過することです。しかし、1 つのフィールド、つまり名前を入力すると、エラーが発生します。

なぜこうなった?すべてが空の場合は失敗するはずです!

4

1 に答える 1

0

を使用すると、 に渡されるハッシュが を含むことを考慮して、レコードと同時にレコードaccepts_nested_attributes_forを作成できます。name のみを渡すと、作成される参加者を検証し、 and がないため失敗します。すべてのフィールドを空のままにすると、動作は同じになるはずですが、明示的に を設定したためではありません。participantscompetition_entrycompetition_entry.createparticipants_attributessurnameinstrument:reject_if => :all_blank

:reject_if => :all_blankparticipant_attributesの場合、ハッシュを無視する必要があると述べています。これはblank?、フィールドに何も入力しない場合に発生します。その場合、は単に無視されるため、competition_entryを作成しようとせずに が作成されます。participantaccepts_nested_attributes_for

于 2013-10-04T12:47:15.690 に答える