2 つの日付属性が連続していることを確認しようとしています。
gem validates_timelinessは、2 月 31 日などの誤った日付を検証するのに優れています。
ただし、 :beforeおよび:afterパラメーターを使用しようとしていますが、機能しません。2012 年 12 月 31 日の開始日を受け入れ、終了日は 2012 年 1 月 1 日に設定されます。
私のモデル:
class Meeting < ActiveRecord::Base
attr_accessible :date_start, :date_end
validates :date_start, :date_end, :presence => true
# Ressource : https://github.com/adzap/validates_timeliness
validates_date :date_start, :before => :date_end
validates_date :date_end, :after => :date_start
end
validates_timeliness は私がやりたいことをすることを許可しますか、それともこのために構築されていませんか?
アプリで日付を処理するためだけに 2 つの gem を使用することは避けたいと思います。date_validator gem で validates_timeliness gem も使用することを意味します。
=====更新=====
理由がわかりませんが、validates_timeless で正しく動作しないものがあります。モデルで次の検証を設定しても、date_start が今日以降であることを受け入れます。
validates_date :date_start, :before => lambda { Date.current }
私の/config/initializers/validates_timeliness.rb (情報用):
ValidatesTimeliness.setup do |config|
# Extend ORM/ODMs for full support (:active_record, :mongoid).
config.extend_orms = [ :active_record ]
# Re-display invalid values in date/time selects
config.enable_date_time_select_extension!
# Handle multiparameter date/time values strictly
config.enable_multiparameter_extension!
# Shorthand date and time symbols for restrictions
config.restriction_shorthand_symbols.update(
:now => lambda { Time.current },
:today => lambda { Date.current }
)
# Use the plugin date/time parser which is stricter and extendable
config.use_plugin_parser = false
end
日付を 2 月 31 日に設定しようとすると、日付が正しくないというエラー メッセージが表示されます。また、構成を変更するたびにサーバーを再起動します。
===== 更新 2 =====
私はこの無効な hash_key を試してみましたが、Rails は文句を言いません:
validates_date :date_start, :blablabla => lambda { Date.current }
どうしたの ?私は何を間違っていますか?
===== 更新 3 =====
バグのようです。これらの 2 つのオプションは機能します。
validates_date :date_start, :on_or_before => lambda { Date.current }
validates_date :date_start, :on_or_after => lambda { Date.current }
次の 2 つのオプションは機能しません。
validates_date :date_start, :before => lambda { Date.current }
validates_date :date_start, :after => lambda { Date.current }
Rails 3.2.9 と Ruby 1.9.3p194 を使用しています。
彼が同じ問題を抱えていることを誰かが確認できますか?