【问题标题】:Validate a belongs to association in a build situation在构建情况下验证属于关联
【发布时间】:2010-03-29 13:56:45
【问题描述】:

我有一个任务模型,它有_many 个任务,并且任务属于_to 任务

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

  validates_presence_of :mission_id
  validates_numericality_of :mission_id

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

 @mission.tasks.build

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

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

     validates_associated   :mission
    

    【讨论】:

      【解决方案2】:

      在 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

      【讨论】:

        猜你喜欢
        • 2016-12-01
        • 2012-08-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-24
        • 2011-03-01
        • 2023-03-25
        • 2021-10-03
        相关资源
        最近更新 更多