带allow_blank的可选time_select默认为00:00

时间:2012-06-01 13:57:04

标签: ruby-on-rails

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

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

然而,当提交时,由于使用time_select自动提交默认日期信息,这就是params的样子:

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

但它似乎不起作用。

感谢任何帮助!

2 个答案:

答案 0 :(得分:5)

遵循相同的路线,对我来说效果很好的是:

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

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值。

答案 1 :(得分:2)

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

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

使param值为nil无济于事,你需要从params散列中拒绝该键; e.g。

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