验证:根据父模型的属性值包含在rails中

时间:2010-09-08 02:15:26

标签: validation activerecord ruby-on-rails-3

我有两个模型Project和'Task`,其中项目has_many任务和任务属于项目

现在在我的Task模型中,我正在使用项目中的属性对字段进行验证

validates :effort, :inclusion => 1..(project.effort)

这会导致错误method_missing: undefined method project

问题是,如何根据Rails 3中父项的属性值(Project.effort)验证子属性(Task.effort)?

2 个答案:

答案 0 :(得分:2)

我最终在回调中进行了验证,如果无效则抛出异常。唯一的缺点是控制器必须捕获异常。

  

<强>更新

     

基于rails 3.0自定义验证器的更好解决方案:   https://web.archive.org/web/20110928154550/http://zadasnotes.blogspot.com/2010/12/rails-3-validation-using-parent-models.html

答案 1 :(得分:0)

当解释它时,类不知道项目对象是什么。并且无法动态添加此类验证。您可以执行以下操作

   def valiate
     unless (1..(project.effort)).member? effort
       errors.add :effort, "must be within 1 to #{project.effort}"
     end
   end