2011-11-07 13 views
1

属性が同じレコードの別の(仮想)属性よりも小さいかどうかを確認する検証が必要です。どうやってやるの?番号の検証 - 別の属性への参照

サンプルコード(動作していない - NoMethodError):

attr_reader :virt 
attr_accessible :virt 

validates :my_attr, :numericality => {:only_integer => true, :less_or_equal => self.virt} 

(私はRoRのの初心者くさいよ、穏やかで明示してください:])

答えて

3

それらの検証ラインはときに実行しようとしているので、クラス定義が最初に遭遇しました。self.virtは存在しません。

あなたは通常、目的の範囲を検証時にcall EDになる代わりラムダは/ procに渡すことができます。

validates :my_attr, :numericality => { :less_or_equal => lambda { virt } } 

これはまだしかし、その素晴らしいではありません。より良い方法は、独自の検証方法を定義することだけです。

validate :my_attr_is_within_range 

def my_attr_is_within_range 
    my_attr <= virtual_attribute 
end 

これははるかに明確で明示的です。あいまい性がないので、selfを使用する必要はありません(設定する場合は、selfが必要です)。

関連する問題