1

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 を使用しています。

彼が同じ問題を抱えていることを誰かが確認できますか?

4

1 に答える 1

3

私はこの宝石を使用していませんが、値のラムダをサポートしているようです。Meeting インスタンスをラムダに渡し、結果を検証メソッドに返す (はずの) 以下を試してください。インスタンス固有であるため、ラムダで実行する必要があります。

  validates_date :date_start, :before => lambda{|m| m.date_end}
  validates_date :date_end, :after => lambda{|m| m.date_start}
于 2012-11-30T22:47:52.017 に答える