在构建情境中验证属于关联

时间:2010-03-29 13:56:45

标签: ruby-on-rails validation belongs-to

我有一个使用has_many任务的任务模型,以及任务belongs_to Mission

为了安全起见,我在任务模型上进行了验证:

  validates_presence_of :mission_id
  validates_numericality_of :mission_id

但问题是,当创建一个Mission并添加这样的任务时:

 @mission.tasks.build

验证返回错误,因为任务上的任务ID为空(任务尚未创建)

如果我删除了验证,则会成功创建任务和任务,但是如何保持验证并仍然可以执行此操作? 我可以在保存后进行回调,但我不认为这是正确的,因为我不想在没有mission_id的情况下保存任务。

P.S。 我正在隐藏我在表格上的任务领域。如果我看到它,它将显示当前的任务,一切都很好。但如果我隐藏它,就会发生错误。

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

表单是否会重置控制器在新操作上给出的属性?

2 个答案:

答案 0 :(得分:3)

验证嵌套属性时,应进行以下验证:

 validates_associated   :mission

答案 1 :(得分:1)

在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