0
私は現在、devise gemを使ってレール上でRubyをプログラミングしています。私のユーザーに誕生日を追加しました。私は18歳以上のユーザーを検証しようとしています。私はこれを試しましたが、動作していません。18歳以上の生年月日属性を検証したい
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
def is_older?()
(DateTime.now - :birth_date).to_i >= 6570
end
validates :birth_date, :presence =>{:if => {:is_older? =>{:message => 'You should be over 18 years old.'}}}
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
end
存在するかどうかわかりませんが、存在する必要がありますが、エラーが表示されないように追加しました。基本的には、ifステートメントをバリデーターとして使用しようとしています。可能であれば、ユーザーが登録しようとした生年月日と今日の日付の差が18年を超えているかどうかを確認します。 ありがとう!あなたが個別に存在し、年齢を確認する必要があり、あなたがより良い日付構文(例えば、18.years.ago
)のためActiveSupport::Duration
を使用することができます
は「.to_i」に「.to_d」を変更し、追加した後にうまく働きましたbirth_dateと同じ行。 if文は次のようになります。 if birth_date.present? && birth_date.to_i> 18.years.ago.to_i ありがとうございました! –
ええと、私は整数にキャストする必要性が不思議です。私は 'birth_date.class.name'と' 18.years.ago.class.name'を見てどちらかが日付にキャストされる必要があるかどうかを見ます。いずれにせよ、あなたはそれを働かせることができてうれしいです! –
私はあなたが正しいと思うし、整数へのキャストはまったく必要ない。たぶん私はキャストが必要な6570(18歳の日数)と日付を比較しようとしているのかもしれません。しかし、あなたのコメントは完全に有効であり、より簡単な解決策を提供します。 ご協力ありがとうございます@ChrisPeters –