2010-12-28 7 views
7

Ich möchte das customer_price >= my_price validieren. Ich habe versucht, die folgenden:Schienen 3: Wie validiere ich A <B, wobei A und B beide Modellattribute sind?

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

(customer_price ist eine Spalte in der Products Tabelle in der Datenbank, während my_price nicht.)

Hier ist das Ergebnis:

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

Was ist der richtige Weg, dies in Rails 3 zu tun?

+1

vielleicht brauchen Sie nur einen Doppelpunkt my_price ein Symbol zu machen? – hdgarrood

+0

mögliche Duplikate von [Wie implementiert Min/Max-Validator in Rails 3?] (Http://stackoverflow.com/questions/4416278/how-to-implement-min-max-validator-in-rails-3) –

Antwort

13

einen Validator benutzerdefinierte erstellen:

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

Nun Dies ist eigentlich der richtige Weg, um es zu tun, aber Ihre Nachricht ist falsch ("sollte weniger als total sein") und ich würde "außer" verwenden, da es hier offensichtlicher ist ("es sei denn Preis = "). Ansonsten ergibt dieses Beispiel keinen Sinn. – hurikhan77

+0

@ hurikhan77: Danke, ich habe das jetzt behoben. –

+0

@RyanBigg Dieser Code schlägt fehl, wenn der Preis oder die Gesamtsumme nicht angegeben wird – Noz

3

Sie benötigen einen bestimmten Validate tun:

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 
Verwandte Themen