У меня есть приложение Rails 3 (с использованием Mongodb и Mongoid, если это имеет значение), и в одной из моих моделей у меня есть поле, определенное как тип Date .
class Participant
include Mongoid::Document
field :birth_date, :type => Date
end
Мой контроллер использует функцию 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
Все это сводится к следующему: как мне выполнить проверку даты в ActiveModel с Mongoid и Rails 3?
Я хочу убедиться, что ввод «бла», как в текстовом поле, не вызывает исключение при назначении .birth_date
поле моей модели. Он должен предоставить красивое сообщение об ошибке проверки без использования контроллера для проверки.
Вот основные требования:
Представление должно быть одним текстовым полем. Ничего больше. Это пользователь требование, что мы не можем изменить
Проверка должна выполняться в
модели, а не в контроллере или
view (javascript или что-то еще)
Нет проверок формата регулярных выражений (они не работают правильно / поддерживают локали и т.д.)
Проблема в том, что значение из текстового поля присваивается .birth_date
раньше validates_format_of и validates_presence_of запускаются. итак ...
как мне перехватить присвоение значения, чтобы я мог проверить его до того, как оно будет присвоено? возможно ли это сделать в модели, используя ActiveModel? или для этого мне нужно ввести код в контроллер?