在rails中,如何将多个UI字段保存到一个嵌套属性?

时间:2013-06-21 02:59:09

标签: ruby-on-rails ruby-on-rails-3

当用户在我的活动策划应用中点击AddDate时,我会添加如下所示的行,以便用户可以添加日期和开始/结束时间以及AM / PM。

但是在我使用嵌套属性的表单中,似乎我的select控件需要引用它们设置的模型字段(:start_time和:end_time)。但是开始和结束时间是从两个选择控件创建的,一个用于小时,一个用于分钟。所以我不确定如何将两个选择中选择的值组合起来形成开始和结束时间。

screenshot

<div class="user_event_inline_container margin_left_ten padding_right_gone">
  <%= f.label  :start_time, "Start", class: 'info_inline_control info_label five_margin_right' %>
  <%= f.select :start_time, options_for_select([['1',1],['2',2],['3',3],['4',4],['5',5],['6',6],['7',7],['8',8],['9',9],['10',10],['11',11],['12',12]]), class: (field_class(@user_event, :start_time) + 'info_inline_control') %>
  <%= f.select :start_time, options_for_select([['00',1],['15',2],['30',3],['45',4]]), class: (field_class(@user_event, :start_time) + 'info_inline_control') %>
  <%= f.select :start_am_pm, options_for_select([['am',1],['pm',2]]), class: (field_class(@user_event, :start_am_pm) + 'info_inline_control') %>
</div>

<div class="user_event_inline_container margin_left_ten padding_right_gone">
  <%= f.label  :end_time, "End", class: 'info_inline_control info_label five_margin_right' %>
  <%= f.select :end_time, options_for_select([['1',1],['2',2],['3',3],['4',4],['5',5],['6',6],['7',7],['8',8],['9',9],['10',10],['11',11],['12',12]]), class: (field_class(@user_event, :end_time) + 'info_inline_control') %>

  <%= f.select :end_time, options_for_select([['00',1],['15',2],['30',3],['45',4]]), class: (field_class(@user_event, :end_time) + 'info_inline_control') %>
  <%= f.select :end_am_pm, options_for_select([['am',1],['pm',2]]), class: (field_class(@user_event, :end_am_pm) + 'info_inline_control') %>
</div>

2 个答案:

答案 0 :(得分:1)

为什么不使用time_select?

答案 1 :(得分:0)

这样做,您需要使用params[]值和Date.parse()在控制器中手动合并它们。

您也可以尝试使用f.time_select,它应该在您提交后作为普通字段。

可能会发现这个有用:Where is the Rails method that converts data from `datetime_select` into a DateTime object?

就个人而言,我使用jQuery插件为我的日期字段编写自定义接口,然后使用javascript将所有字段合并到实际提交的隐藏字段中。