2010-12-28 14 views
7

Me gustaría validar que customer_price >= my_price. He intentado lo siguiente:Rieles 3: ¿Cómo validar que A <B donde A y B son atributos del modelo?

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

(customer_price es una columna de la tabla Products en la base de datos, mientras que my_price no lo es.)

aquí está el resultado:

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

¿Cuál es la forma correcta de hacer esto en Rails 3?

+1

tal vez sólo tiene dos puntos para hacer my_price un símbolo? – hdgarrood

+0

posible duplicado de [¿Cómo implementar minimo validador en Rails 3?] (Http://stackoverflow.com/questions/4416278/how-to-implement-min-max-validator-in-rails-3) –

Respuesta

13

Crear un validador personalizado:

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

Bien esta es la forma correcta de hacerlo pero su mensaje es incorrecto ("debería ser menor que el total") y usaría "a menos", ya que es más obvio aquí ("a menos que el precio sea = total ", tenga en cuenta"> = "). De lo contrario, este ejemplo no tiene sentido. – hurikhan77

+0

@ hurikhan77: Gracias, arreglé esto ahora. –

+0

@RyanBigg Este código fallará si no se proporciona el precio o el total – Noz

3

lo que necesita hacer una validación específica:

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 
Cuestiones relacionadas