2011-06-18 7 views
0

モデル1belongs_to:model2アソシエーションを有する。 model2には、という期間を持つ整数という属性があります。 model1には、start_dayという属性があります。このモデルでは、start_dayがmodel2のduration以下であることを検証したいと思います。モデルバリデーションで関連付けを使用するには?

私はMODEL1に次の行を追加:

...

MODEL2属性持続時間を有する

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

RailsはNoMethodError(略称:MODEL2のための未定義のメソッド `継続」)が発火

私は何が不足していると思いますか?事前にありがとうございます...

答えて

6

less_than_or_equal_toオプションには数値、インスタンスメソッドの名前を示すシンボル、または検証時に実行されるProcが必要です。

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

それとも、model2_durationと呼ばれるモデル1のメソッドを持っている場合は、これにそれを短縮することができます::

validates_numericality_of :start_day, :less_than_or_equal_to => :model2_duration 
あなたはおそらく第三の選択肢をしたいです
関連する問題