日付バリデーターを書き込もうとしています。私が抱えている問題は、バリデーターがdate_of_birthをDateオブジェクトと見なしているのに、文字列として設定されていることです。(1)検証が適用される前に文字列ではなく日付として表示されるのはなぜですか。(2)日付ではなく文字列として読み取るにはどうすればよいですか。私が抱えている問題は、%m/%d/%Y
日付を受け入れたいということですが、2010年7月5日に入力すると、日付に変換され、05が月、07が日付として表示されます。私はDeviseを使用しているので、コントローラーの日付に対して何かを行っているかどうかはわかりませんが、疑わしいです。
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
# Setup accessible (or protected) attributes for your model
attr_accessible :email, :first_name, :last_name, :password, :password_confirmation, :remember_me, :address, :date_of_birth, as: [:default, :admin]
attr_accessible :active, :role, as: [ :admin ]
validates_presence_of :email, :first_name, :last_name, :address
validate :valid_date_of_birth
def date_of_birth=(date_of_birth)
Rails.logger.info("set date_of_birth: #{date_of_birth}")
Rails.logger.info("set date_of_birth class: #{date_of_birth.class}")
self[:date_of_birth] = date_of_birth
end
private
def valid_date_of_birth
Rails.logger.info "the date of birth: #{date_of_birth}"
Rails.logger.info "the date of birth class: #{date_of_birth.class}"
errors.add(:date_of_birth, 'must be a valid datetime') if ((DateTime.strptime(date_of_birth, "%m/%d/%Y") rescue ArgumentError) == ArgumentError)
end
end
したがって、date_of_birthを設定すると、Stringが取得されます。 valid_date_of_birth
これは、date_of_birthのDBタイプであるDateと見なされます。私はここでこれを過度に複雑にしている何か間違ったことをしていますか?追加の文字列フィールドを維持する唯一のオプションはありますか?これは編集でどのように機能しますか?