Проверка принадлежности к ассоциации в ситуации сборки

StackOverflow https://stackoverflow.com/questions/2538376

Вопрос

У меня есть модель миссии, которая имеет_many Task, и Задача принадлежит_ к Mission

В целях безопасности я произвел эту проверку в модели задачи:

  validates_presence_of :mission_id
  validates_numericality_of :mission_id

Но проблема в том, что при создании Миссии и добавлении подобных задач:

 @mission.tasks.build

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

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

P.S.Я скрываю свое поле миссии в форме.Если у меня это будет видно, это покажет текущую миссию, и все в порядке.Но если я спрячу это, произойдет ошибка.

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

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

Это было полезно?

Решение

Используйте following в Mission.rb

has_many :tasks
validates_associated :task

Задача.рб

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

Другие советы

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

 validates_associated   :mission
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top