I have two models Project and 'Task` where project 开发者_StackOverflowhas_many tasks and task belongs to project
Now in my Task model I am doing validation on a field using attributes in the project
validates :effort, :inclusion => 1..(project.effort)
This results in an error method_missing: undefined method project
Question is, how can I validate a child attribute (Task.effort) based on a parent's attribute's value (Project.effort) in Rails 3?
I ended up doing the validation in a callback and throwing an exception if it is not valid. The only drawback is that the controller has to catch the exception.
UPDATE
A better solution based on rails 3.0 custom validators: https://web.archive.org/web/20110928154550/http://zadasnotes.blogspot.com/2010/12/rails-3-validation-using-parent-models.html
When this is intepreted the class doesn't know what the project object is. And such validates can't be added dynamically. You can do the following
def valiate
unless (1..(project.effort)).member? effort
errors.add :effort, "must be within 1 to #{project.effort}"
end
end
加载中,请稍侯......
精彩评论