我有一个使用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" %>
表单是否会重置控制器在新操作上给出的属性?
答案 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