1

User.rbモデル内にバリデーターを追加して、デバイスユーザーを作成する前に指定された生年月日が18歳以上であることを検証します。

これは私が持っている検証です。

# user.rb
validates :birthdate, :before => lambda { 18.years.ago }, :before_message => "must be at least 18 years old"

ユーザースキーマの内部

# User schema
t.date     "birthdate"

問題は、オブジェクトを保存しようとすると次のエラーが発生することです。

ArgumentError in Devise::RegistrationsController#create

Unknown validator: 'BeforeValidator'
4

3 に答える 3

3

Unknown validator: 'BeforeValidator'あなたが魔法を過大評価していることを意味します:)

これを試して:

validate do |user|
  if user.birthdate > 18.years.ago
    errors.add(:birthdate, "must be at least 18 years old")
  end
end
于 2012-04-24T19:47:07.590 に答える
0

次のことも試すことができます。

before_validation :validade_birth_date

private

def validade_birth_date
    if (birthdate != nil)
      errors.add(:birthdate, "must be at least 18 years old") unless (birthdate < DateTime.now)
    end
end
于 2012-04-24T21:55:33.543 に答える
0

:beforeActiveRecordの実際のデフォルトバリデーターではありません。validatesは、不明なバリデーター名を見つけると、その名前(この場合はBeforeValidation)を使用して1つのカスタムバリデーターを検索します。

すべての検証は、実際のオブジェクトが本来保存される前に行われるため、指摘されているように独自のバリデーターを作成する必要はありません。ActiveRecordはすでに1つを提供しています::numericality

validates :birthdate, :numericality => { :greater_than => 18 , :message => "must be at least %{count} years old" }
于 2012-04-24T22:25:45.833 に答える