我有一个 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/