Tengo una aplicación de Rails 3 (usando Mongodb y Mongoid si eso hace la diferencia), y en uno de mis modelos tengo un campo definido como un tipo de fecha.Validación de fecha en Rails 3
class Participant
include Mongoid::Document
field :birth_date, :type => Date
end
Mi controlador utiliza la función de find_or_initialize_by mongo:
class ParticipantController
def create
@participant = Participant.find_or_initialize_by(params[:participant])
if @participant.save
redirect_to participants_path
else
render :new
end
end
end
Todo esto se reduce a: cómo hago validación de fechas en ActiveModel con Mongoid y Rails 3?
Quiero asegurarme de que una entrada de "blah" como en un cuadro de texto no arroje una excepción cuando se asigna al campo .birth_date
de mi modelo. Debería proporcionar un buen mensaje de error de validación sin usar el controlador para hacer la validación.
He aquí los requisitos básicos:
La vista debe ser un único cuadro de texto. Nada más. Se trata de un usuario requisito de que no podemos cambiar
La validación se debe hacer en el modelo , no en el controlador o en la vista
(javascript o lo que sea)No hay validaciones de formato de expresiones regulares (que no funcionan bien/local de apoyo, etc.)
el problema es que el valor de la caja de texto se asigna a la .birth_date
antes validates_format_of y validates_presence_of se ejecutan. entonces ...
¿cómo puedo interceptar la asignación del valor, para poder validarlo antes de que se asigne? ¿Es posible hacer eso en el modelo, usando ActiveModel? o ¿esto me exige poner código en el controlador para hacer esto?
¿por qué no está haciendo la validación de fecha en su controlador? Defina un método en su modelo que genere un 'ArgumentError' si la fecha no es válida y luego haga que su controlador use ese método como' raise 'Usted no especificó una fecha válida' 'a menos que @ participant.date_is_valid' – Alex
Además, podría proporcionar un poco más detalles sobre lo que quieres decir con una fecha 'válida'? ¿Una cadena de fecha y hora estándar válida de RFC? La fecha se puede formatear de muchas maneras diferentes. Cualquier otra información sería útil – Alex