Validation 验证:包含在基于父模型的rails中';属性值

Validation 验证:包含在基于父模型的rails中';属性值,validation,activerecord,ruby-on-rails-3,Validation,Activerecord,Ruby On Rails 3,我有两个模型,项目和任务,其中项目有很多任务,任务属于项目 现在,在我的任务模型中,我正在使用项目中的属性对字段进行验证 validates :effort, :inclusion => 1..(project.effort) 这将导致错误方法\u缺失:未定义的方法项目 问题是,我如何根据Rails 3中父属性的值(Project.efforce)验证子属性(Task.efforce)?当这被解释时,类不知道项目对象是什么。这样的验证不能动态添加。您可以执行以下操作 def valiat

我有两个模型,项目和任务,其中项目有很多任务,任务属于项目

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

validates :effort, :inclusion => 1..(project.effort)
这将导致错误
方法\u缺失:未定义的方法项目


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

当这被解释时,类不知道项目对象是什么。这样的验证不能动态添加。您可以执行以下操作

def valiate unless (1..(project.effort)).member? effort errors.add :effort, "must be within 1 to #{project.effort}" end end 戊酸def 除非(1..(项目努力))。成员?努力 errors.add:efforce,“必须在1到#{project.efforce}之间” 结束 结束
最后,我在回调中进行了验证,如果无效,则引发异常。唯一的缺点是控制器必须捕获异常

更新

基于rails 3.0自定义验证器的更好解决方案:


这是假设你有一个b/w任务和项目模型的关系,每个任务的努力应该在其项目的努力范围内,我最终得到了一个尝试的机会。不知怎的,你的建议对我不起作用。它仍然没有验证更改。最后,我在回调中进行了验证,如果无效,则引发异常。唯一的缺点是控制器必须捕获异常。到博客的链接已关闭。更新它以链接到页面的internet存档。