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

我正在尝试在我的表单中创建一个时间字段。 我这样做:

 

但是在提交时,由于使用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 

但它似乎没有用。

任何帮助表示赞赏!

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

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

使param值为nil无济于事,你需要从params散列中拒绝该键; 例如

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

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

在控制器之前添加一个filter/操作

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

创建filter

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