使用simple_form在Rails 3中检查日期与日期

时间:2013-04-05 15:16:37

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2 validation simple-form

在Rails中检查日期的最佳方法是什么?

我有一个寄存器,某些寄存器在某些日子发生,而我想要做的是限制可选日期以匹配日期,即如果寄存器设置为星期一15:00,那么日期选择应该只提供星期一日期,即2013年4月1日,2013年4月8日,2013年4月15日等。

以下是我当前注册表的截图:

enter image description here

我的表单使用simple_form gem,并有以下简单输入:

<%= f.input :date %>

编辑: 这是我的模型,按照cthulhu的要求

class Register < ActiveRecord::Base
  has_many :student_registers
  has_many :students, :through => :student_registers
  belongs_to :event
  attr_accessible :date, :student_ids, :module_class_id, :event_id
end

2 个答案:

答案 0 :(得分:2)

日期类有很多有用的方法,比如

>> d = Date.today
=> Fri, 05 Apr 2013
>> d.monday?
=> false
>> d.friday?
=> true
>> d.wday
=> 5

编写验证方法应该足够了:

class Register < ActiveRecord::Base
  validates_each :date do |record, attr, value|
    record.errors.add(attr, "Must be #{event.day}") unless value.wday == Date.parse(event.day).wday # I assume 'event.day' holds a weekday as a String, e.g. 'Monday'
  end
end

答案 1 :(得分:0)

可能的日期是否存储在数据库表中?如果是这样,那么做一个集合选择可以过滤掉你想要的值。类似的东西:

<%= f.collection_select(:date, Dates.all.where(:day => 5), :id, :name, :prompt => 'Select') %>

将“Dates.all.where(:day =&gt; 5)”替换为您拥有的任何日期组合以及您想要的任何条件。