2010-12-28 17 views
7

Chciałbym potwierdzić, że customer_price >= my_price. Próbowałem następujące:Szyny 3: Jak sprawdzić, czy A <B, gdzie A i B są atrybutami modelu?

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

(customer_price jest kolumna w tabeli w bazie danych Products, natomiast my_price nie jest.)

Oto wynik:

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

Co jest właściwy sposób na zrobienie tego w Rails 3?

+1

może po prostu potrzebujesz dwukropek aby my_price symbolem? – hdgarrood

+0

możliwy duplikat [Jak wdrożyć min/max walidator w Rails 3?] (Http://stackoverflow.com/questions/4416278/how-to-implement-min-max-validator-in-rails-3) –

Odpowiedz

13

utworzyć własny walidator:

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

Cóż jest to właściwie właściwy sposób, ale twoja wiadomość jest błędna ("powinna być mniejsza niż całkowita") i użyłbym "chyba, że", ponieważ jest to bardziej oczywiste ("chyba że cena = total ", zanotuj"> = "). W przeciwnym razie ten przykład nie ma sensu. – hurikhan77

+0

@ hurikhan77: Dzięki, naprawiłem to teraz. –

+0

@RyanBigg Ten kod nie powiedzie się, jeśli nie podano ceny lub sumy – Noz

3

Trzeba zrobić konkretnego sprawdzenia poprawności:

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 
Powiązane problemy