我正在尝试验证两个日期属性,以便它们是连续的。
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 允许做我想做的事还是不是为此而建的?
我宁愿避免使用两个 gem 来处理我的应用程序中的日期。我的意思是同时使用 validates_timeliness gem 和 date_validator 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 =====
这似乎是一个错误。这两个选项确实有效:
validates_date :date_start, :on_or_before => lambda { Date.current }
validates_date :date_start, :on_or_after => lambda { Date.current }
这两个选项不起作用:
validates_date :date_start, :before => lambda { Date.current }
validates_date :date_start, :after => lambda { Date.current }
我正在使用 Rails 3.2.9 和 Ruby 1.9.3p194。
有人可以确认他有同样的问题吗?