У меня есть приложение на 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
моей модели. Это должно обеспечить хорошее сообщение об ошибке проверки без использования контроллера для проверки.
Вот основные требования:
Представление должно быть одним текстовым полем.
Ничего больше. Это пользователь
требование, что мы не можем изменить
Проверка должна быть сделана в
модель, не в контроллере или
просмотр (JavaScript или любой другой)
Нет проверок формата регулярных выражений (они не работают правильно / поддерживают локали и т. Д.)
Проблема в том, что значение из текстового поля присваивается .birth_date
до запуска validates_format_of и validates_presence_of. так что ...
как мне перехватить присвоение значения, чтобы я мог проверить его до того, как оно будет присвоено? Можно ли сделать это в модели, используя ActiveModel? или это требует от меня ввода кода в контроллер для этого?