6

我正在尝试在我的表单中设置一个时间字段可选。我正在这样做:

<%= f.time_select :end_time, minute_step: 5, include_blank: true %>

然而,当它被提交时,由于使用 time_select 自动提交了默认日期信息,因此参数如下所示:

end_time(1i): '2000' end_time(2i): '1' end_time(3i): '1' end_time(4i): '' end_time(5i): ''

Rails 将此解释为真实日期并将 end_time 设置为 00:00

是否有任何修复/锻炼能够有一个可选的时间字段?我在控制器中试过这个:

if params[:event][:end_time] && params[:event][:end_time][:hour].blank? && params[:event][:end_time][:minute].blank?
  params[:event][:end_time] = nil
end

但这似乎不起作用。

任何帮助表示赞赏!

4

2 回答 2

6

按照同样的思路,对我来说效果很好的是:

向控制器添加前置过滤器/操作

before_filter :filter_blank_end_time, only: [:create, :update]

创建过滤器

def filter_blank_end_time
    if params[:event]['end_time(4i)'].blank?
        params[:event]['end_time(1i)'] = ""
        params[:event]['end_time(2i)'] = ""
        params[:event]['end_time(3i)'] = ""
        params[:event]['end_time(4i)'] = ""
        params[:event]['end_time(5i)'] = ""
    end
end

为所有字段传递空字符串似乎会为结束时间产生 NIL 值。

于 2014-07-02T23:11:02.143 回答
2

您的参数不是 [:event][:end_time],它们是:

[:event]['end_time(1i)']..[:event]['end_time(5i)'] 分别。

使参数值为零无济于事,您需要从参数哈希中拒绝该键;例如

params[:event].except('end_time(4i)', 'end_time(5i)') if params[:event]['end_time(4i)'].blank?

于 2012-06-01T14:06:32.860 回答