2011-11-26 8 views
22

que tienen un modelo simpleArgumentError: Debe suministrar al menos una validación con: si

class Task < ActiveRecord::Base 
    validates :deadline, :if => :deadline_in_future? 

    def deadline_in_future? 
    Date.today < self.deadline 
    end 
end 

todo parece bien, pero cuando yo en mi consola de rieles

irb(main):001:0> Task.new 
ArgumentError: You need to supply at least one validation 

dónde está el problema ?

Respuesta

35

Olvidó decir validates cómo quiere validar :deadline. Creo que no entiendes lo que hace :if; la opción :if => :deadline_in_future? significa:

Validate :deadline only if the deadline_in_future? method returns a true value.

Sospecho que desea validar que la fecha límite es en el futuro:

validate :deadline_in_future? 

Más detalles están disponibles en el Active Record Validations and Callbacks Guide.

+0

Sí, de verdad. He entendido mal las validaciones. Gracias. – Ximik

1

Dice que no pasa ninguna validación al método validates. Como validates :presence, por ejemplo. ¿Qué estás tratando de validar?

+0

Estoy tratando de hacer una validación como esta http://guides.rubyonrails.org/active_record_validations_callbacks.html#using-a-symbol-with-if-and-unless – Ximik

+2

En ese ejemplo ': presence => true 'dice que la presencia del campo' card_number' debe validarse, pero la validación debe realizarse solo si el método 'pay_with_card?' devuelve verdadero. La idea detrás de eso es que el pedido debe tener un número de crédito si el pago se realizó a través de una tarjeta de crédito, pero si el pago no se realizó con tarjeta de crédito, no es necesario verificar que el número de tarjeta esté almacenado correctamente. –

77

Debe cambiar validates en validate.

+5

gracias, pero ¿por qué? – yeyo

+2

@yeyo Porque es una sintaxis para la validación personalizada. Consulte [Métodos personalizados en el documento de validación de registros activos] (http://guides.rubyonrails.org/active_record_validations.html#custom-methods) –

Cuestiones relacionadas