Подтвердить принадлежность к ассоциации в ситуации построения - PullRequest
2 голосов
/ 29 марта 2010

У меня есть модель Миссии, в которой есть Задача has_many, и Задача принадлежит Миссии

. В целях безопасности я проверил это на Модели Задач:

  validates_presence_of :mission_id
  validates_numericality_of :mission_id

Но проблема в том, чтокогда создаете миссию и добавляете задачи следующим образом:

 @mission.tasks.build

Проверка возвращает ошибку, потому что идентификатор миссии в задаче нулевой (миссия еще не была создана)

Если яУдалите валидацию, Миссия и Задание успешно созданы, но как я могу сохранить валидацию и продолжить эту работу?Я мог бы сделать обратный вызов после сохранения, но я не думаю, что это правильно, потому что я не хочу сохранять Задачи без mission_id.

PS Я скрываю свое поле миссии в форме.Если у меня это будет видно, оно покажет правильную миссию, и все в порядке.Но если я скрываю это, происходит ошибка.

<%=  f.hidden_field :mission, :label => "Missão" %>

Форма сбрасывает атрибуты, заданные контроллером для нового действия?

Ответы [ 2 ]

3 голосов
/ 29 марта 2010

При проверке вложенного атрибута вы должны выполнить следующую проверку:

 validates_associated   :mission
1 голос
/ 29 марта 2010

Использовать следующее в Mission.rb

has_many :tasks
validates_associated :task

Task.rb

belongs_to :mission

в контроллере

@mission=Mission.new(params[:mission])  
task= @mission.tasks.build(params[:task]) ###this is same as Task.new(:mission_id=>@mission.id)

if @mission.save #this will save only when mission as well as task are valids, also it will automatically assign mission_id to tasks table you have nothing to worry about it<br>
else
    #your error code will be here.......
end

Ссылка: - http://api.rubyonrails.org/classes/ActiveRecord/Validations/ClassMethods.html

...