У меня есть приложение Rails 3 (с использованием Mongodb и Mongoid, если это имеет значение), и в одной из моих моделей у меня есть поле, определенное как тип Date.Дата проверки в Rails 3
class Participant
include Mongoid::Document
field :birth_date, :type => Date
end
Мой контроллер использует find_or_initialize_by особенность Монго:
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? или это требует от меня ввода кода в контроллер для этого?
Почему вы не проводите проверку даты в своем контроллере? Определите метод в вашей модели, который вызывает «ArgumentError», если дата недействительна, а затем ваш контроллер использует этот метод, например «рейз». Вы не указали допустимую дату «если только @ member.date_is_valid» – Alex
. Также вы могли бы предоставить немного больше информации о том, что вы подразумеваете под «действительной» датой? Действительная строка даты и времени RFC? Дата может быть отформатирована по-разному. Любая дополнительная информация была бы полезной – Alex