将日期时间拆分为两个单独的表单字段(RAILS)

时间:2016-12-10 00:33:11

标签: ruby-on-rails ruby datetime ruby-on-rails-4 rubygems

问题:如何将日期时间拆分为两个单独的表单字段?

我有以下内容:

<%= f.label :Borrowed, "Check Out Date*" %></td>
<%= f.date_field :Borrowed, :id => "datepicker", min:Date.today, :ignore_time => true, :required => true %></td>

<%= f.label :Borrowed, "Check Out Time*" %>
<%= f.time_field :Borrowed, min:"9:00 AM", max: "4:30 PM", default:"10:00 AM", :ignore_date => true, :required => true%>

<td><%= f.label :Returned, "Check In Date" %>
<td><%= f.date_field :Returned, :id => "datepicker", min:Date.today, :ignore_time => true, :required => true %>

<td><%= f.label :Returned, "Check In Time*" %>
<td><%= f.time_field :Returned, min:"9:00 AM", max: "4:30 PM", default:"10:00 AM", :ignore_date => true, :required => true%>

所以,我的数据库中有两个datetime字段:Borrowed和Returned。我想分割日期和时间,以便用户可以使用jQuery脚本从日历中选择日期。 (这可能是问题......)当我填写并提交表格时,正确保存的时间会发生什么,但是借用和退回时的日期是相同的。

所以在数据库中它看起来像这样:

Returned: 2016-12-09 15:00:00 -0800
Borrowed: 2016-12-09 10:00:00 -0800

的jQuery

$('#datepicker').datepicker({format: 'dd/mm/yyyy'});

宝石

gem 'bootstrap-timepicker-rails'
gem 'bootstrap-datepicker-rails'

1 个答案:

答案 0 :(得分:4)

您不能有两个名称相同的字段,如:

<%= f.date_field :Borrowed, :id => "datepicker", min:Date.today, :ignore_time => true, :required => true %></td>
<%= f.time_field :Borrowed, min:"9:00 AM", max: "4:30 PM", default:"10:00 AM", :ignore_date => true, :required => true%>

这样做肯定会为您提供一个字段的值,并且将覆盖具有相同名称的字段的值。

您可以使用以下两种方式完成您的工作:

1)修改表格中的列

表格中可能有两列用于存储两个值:日期和时间。 Rails提供以下两种数据类型来存储日期和时间。

add_column :table_name, :borrowed_date, :date # It will store day, month & year.
add_column :table_name, :borrowed_time, :time # It will store hours, minutes & seconds.

2)使用date_field_tag&amp; time_field_tag

在这种情况下,您不必依赖form_for为我们生成价值,而是必须承担责任。

<%= date_field_tag :borrowed_d # other options %>
<%= time_field_tag :borrowed_t # other options %>

现在,Rails不会抱怨列的存在:borrowed_d&amp; borrowed_t,同时,它也不会保存这些列的值。因此,在您的控制器中,现在您手动需要获取borrowed_dborrowed_t的值,将它们合并为一个,并将该内容保存在数据库中的borrowed

不仅如此,在编辑ActiveRecord对象的情况下,您必须从borrowed收集这两个值,并在表单中显示它们。