我正在尝试将表单中的时间字段设为可选。我这样做:
<%= 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
但它似乎不起作用。
感谢任何帮助!
答案 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?