我有两个模型Project
和'Task`,其中项目has_many任务和任务属于项目
现在在我的Task
模型中,我正在使用项目中的属性对字段进行验证
validates :effort, :inclusion => 1..(project.effort)
这会导致错误method_missing: undefined method project
问题是,如何根据Rails 3中父项的属性值(Project.effort)验证子属性(Task.effort)?
答案 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