2013-10-04 3 views
0

У меня есть эта модель:Rails 4 Вложенные Validations не работает

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

Какая ошибка? – Agis

ответ

0

При использовании accepts_nested_attributes_for, вы можете создать participants записи в то же время, что competition_entry запись, учитывая, что хэш передается competition_entry.create содержит participants_attributes. Когда вы передаете только имя, он подтверждает, что участник должен быть создан и сбой, поскольку он не имеет surname и instrument. Когда вы оставите все поле пустым, поведение должно быть одинаковым, но это не потому, что вы явно установили :reject_if => :all_blank.

:reject_if => :all_blank указывает, что хэш-код participant_attributes следует игнорировать, если он равен blank?, что происходит, когда вы не заполняете какое-либо поле. Тогда происходит то, что создается competition_entry, не пытаясь создать participant, потому что accepts_nested_attributes_for просто игнорируется.

Смежные вопросы