如何在模型验证中使用关联?

Sch*_*lle 0 validation activerecord ruby-on-rails ruby-on-rails-3

有一个MODEL1belongs_to的:MODEL2关联.model2有一个名为duration的属性,带有一个整数.model1有一个名为start_day的属性.在此模型中,我想验证start_day是否小于或等于model2的持续时间.

我将以下行添加到model1:

validates_numericality_of :start_day, :less_than_or_equal_to => :model2.duration
Run Code Online (Sandbox Code Playgroud)

Rails触发NoMethodError(未定义的方法`duration':model2:Symbol)

model2有一个属性持续时间......

知道我错过了什么吗?提前致谢...

Rob*_*vis 6

less_than_or_equal_to选项需要一个数值,一个命名实例方法的符号,或一个在验证时执行的Proc.您可能想要第三个选项:

validates_numericality_of :start_day,
    :less_than_or_equal_to => Proc.new { |model1| model1.model2.duration }
Run Code Online (Sandbox Code Playgroud)

或者如果你在model1中有一个方法,model2_duration你可以将它缩短为:

validates_numericality_of :start_day, :less_than_or_equal_to => :model2_duration
Run Code Online (Sandbox Code Playgroud)