datetime - Rails 中单独的日期和时间表单字段

标签 datetime forms activerecord ruby-on-rails-3

我有一个 ActiveRecord 模型 Event,其中包含日期时间列 starts_at。我想提供一个表单,其中 starts_at 的日期和时间是单独选择的(例如 "23-10-2010" 代表日期,"18:00 “ 时间)。这些字段应由单列 starts_at 支持,并且验证最好也应针对 starts_at

我当然可以使用虚拟属性和 Hook ,但我想要一个更优雅的解决方案。我尝试过 composed_of ( rdoc ) 和 attribute-decorator ( lighthouse discussion , github ),但没有成功。

下面是我想要的粗略轮廓..

class Event < ActiveRecord::Base
  validates_presence_of :start_date
end

# View
# On submission this should set start_date.
form_for @event do |f|
  f.text_field :starts_at_date         # date-part of start_date
  f.text_field :starts_at_time_of_day  # time-of-day-part of start_date
  f.submit
end

感谢任何帮助。

最佳答案

View 中必须有一个 text_field 吗?

据我所知,您可以有一个 date_time 字段,然后只需使用两个不同的输入字段来设置该字段的不同部分。

form_for @event do |f|
  f.date_select :starts_at
  f.time_select :starts_at, :ignore_date => true
  f.submit
end

由于 Rails 日期和时间选择助手设置了五个不同的参数(starts_at(1i) 表示年份部分,2i 表示月份部分,依此类推),这意味着 date_select 只为日期部分设置它们,而如果将 :ignore_date => true 传递给 time_select,它只会设置小时和分钟部分。

如果您必须有一个text_field,我不知道该怎么做,但在发送表单之前设置日期时间参数之前可以使用一些 jQuery 魔法。

关于datetime - Rails 中单独的日期和时间表单字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3677531/

相关文章:

php strtotime 给出默认日期

python - 在日期时间字段中按小时对 NumPy 数组进行分箱

javascript - 带有基于选择选项的条件表单操作的预订表单

javascript - jQuery 仅检查第一个表单

javascript - 如何从用户日期和时区输入正确地在数据库中存储UTC日期?

objective-c - 将 .NET 中的 DateTime 对象格式化为 objective-c 的 NSDate

forms - 提交错误数据后,如何在浏览器中处理URL并转换为表单 Action 值?

ruby-on-rails - 按多列组合对结果集进行分组

ruby-on-rails - 使用 `update_all` 时运行验证

ruby-on-rails - Rails 从所有 Select * 类型查询中隐藏特定记录