Проверка даты в Rails 3

У меня есть приложение 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? или для этого мне нужно ввести код в контроллер?

6
задан Derick Bailey 19 November 2010 в 16:47
поделиться