【问题标题】:Checking day against date in Rails 3 using simple_form使用 simple_form 在 Rails 3 中根据日期检查日期
【发布时间】:2013-04-05 15:16:37
【问题描述】:

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

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

这是我当前寄存器的截图:

我的表单使用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

【问题讨论】:

  • 您想限制下拉菜单只显示某些日期(例如,只显示星期一),还是要验证日期是否是星期几?
  • 哪个都可以,哪个更容易实现?我想验证会更容易,对吧?
  • 可能是的,但绝对不那么用户友好
  • 好的,有没有机会写一些代码,即如何实现的验证方法?
  • 是的,但是验证是在模型级别实现的,所以你应该从你的模型中附加一些代码

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


【解决方案1】:

Date 类有很多有用的方法,比如

>> 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

【讨论】:

  • 是的,我已经知道了,但我正在寻找一种方法来在我的表单中验证它,使用这些有用的日期/时间方法中的任何一种
  • 我不确定是什么问题 :) 你在编写验证方法时遇到问题吗?
  • 是的,这就是我需要的帮助
【解决方案2】:

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

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

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

【讨论】:

  • 不,日期只是使用&lt;%= f.input :date %&gt; 方法显示
猜你喜欢
  • 2017-02-15
  • 2011-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多