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

时间:2011-06-18 15:06:15

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

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

我将以下行添加到model1:

validates_numericality_of :start_day, :less_than_or_equal_to => :model2.duration

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

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

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

1 个答案:

答案 0 :(得分:6)

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

validates_numericality_of :start_day,
    :less_than_or_equal_to => Proc.new { |model1| model1.model2.duration }

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

validates_numericality_of :start_day, :less_than_or_equal_to => :model2_duration