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

pge*_*son 40 forms activerecord datetime ruby-on-rails-3

我有一个Event带有日期时间列的ActiveRecord模型starts_at.我想提交一份表格,其中日期和时间starts_at分别选择(例如"23-10-2010"日期和"18:00"时间).这些字段应该由单列支持starts_at,并且验证也应该优选地反对starts_at.

我当然可以使用虚拟属性和钩子,但我想要一个更优雅的解决方案.我已经尝试了composed_of(rdoc)和属性装饰器(灯塔讨论,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
Run Code Online (Sandbox Code Playgroud)

任何帮助赞赏.

Fro*_*ost 39

你必须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
Run Code Online (Sandbox Code Playgroud)

由于rails日期和时间选择帮助器设置了五个不同的参数(starts_at(1i)对于年份部分,2i对于月份部分,依此类推),这意味着date_select只为日期部分设置它们,而如果你传递:ignore_date => truetime_select它,它将只设置小时和分钟部分.

如果你必须有一个text_field我不知道该怎么做,但在发送表单之前设置datetime参数之前可能会使用一些jQuery魔法.


asg*_*eo1 9

今天看着这个Rails项目,并遇到了这个宝石:

https://github.com/shekibobo/time_splitter

设置DateTimes可能是一件困难或丑陋的事情,尤其是通过Web表单.找到一个好的DatePicker或TimePicker很容易,但让它们在两者上工作可能很困难.TimeSplitter会自动为日期时间或时间属性生成日期,时间,小时和分钟的访问器,这使得使用不同的表单输入来设置日期时间字段的不同部分变得微不足道.

看起来它会为你完成这项工作