2

我有一个具有_many 任务的任务模型,任务属于_to 任务

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

  validates_presence_of :mission_id
  validates_numericality_of :mission_id

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

 @mission.tasks.build

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

如果我删除验证,则任务和任务已成功创建,但我怎样才能保留验证并仍然有这项工作?我可以在保存后进行回调,但我认为这是不对的,因为我不想在没有任务 ID 的情况下保存任务。

PS我在表格上隐藏了我的任务字段。如果我看到它,它将显示当前任务并且一切正常。但如果我把它隐藏起来,就会发生错误。

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

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

4

2 回答 2

3

验证嵌套属性时,您应该执行以下验证:

 validates_associated   :mission
于 2010-03-29T14:38:56.910 回答
1

在 Mission.rb 中使用以下内容

has_many :tasks
validates_associated :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

于 2010-03-29T14:56:56.763 回答