2010-12-28 6 views
7

customer_price >= my_priceを検証したいと思います。私は、次のことを試してみました:Rails 3:A <Bを検証するにはどうすればAとBの両方がモデル属性ですか?

class Product < ActiveRecord::Base 
    attr_accessor :my_price 
    validates_numericality_of :customer_price, :greater_than_or_equal_to => my_price 
    ... 
end 

(。my_priceがない間customer_priceは、データベース内Productsテーブルの列です)

ここでは結果である:

NameError in ProductsController#index 
undefined local variable or method `my_price' for #<Class:0x313b648> 

は何ですかRails 3でこれを行う正しい方法は?あなたが特定の検証を行う必要がある

+1

おそらくあなただけのmy_priceシンボルを作るためにコロンが必要? – hdgarrood

+0

[Rails 3で最小/最大バリデータを実装する方法は?](http://stackoverflow.com/questions/4416278/how-to-implement-min-max-validator-in-rails-3) –

答えて

13

は、カスタムバリデータを作成します。

validate :price_is_less_than_total 

# other model methods 

private 

    def price_is_less_than_total 
    errors.add(:price, "should be less than total") if price > total 
    end 
+0

よくあなたのメッセージが間違っている(「合計よりも小さくなるはずです)」と私はここでより明白です(「価格<総額」または少なくとも「もし価格なら」) = total "、"> = "に注意してください)。さもなければこの例は意味をなさない。 – hurikhan77

+0

@ hurikhan77:ありがとう、今これを修正しました。 –

+0

@RyanBigg価格または合計が提供されない場合、このコードは失敗します – Noz

3

validate :more_than_my_price 

def more_than_my_price 
    if self.customer_price >= self.my_price 
    errors.add(:customer_price, "Can't be more than my price") 
    end 
end 
関連する問題