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

rya*_*nio 5 ruby-on-rails

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

<%= f.time_select :end_time, minute_step: 5, include_blank: true %>
Run Code Online (Sandbox Code Playgroud)

但是,当提交时,由于使用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
Run Code Online (Sandbox Code Playgroud)

但它似乎没有用.

任何帮助表示赞赏!

cas*_*yli 5

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

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

before_filter :filter_blank_end_time, only: [:create, :update]
Run Code Online (Sandbox Code Playgroud)

创建过滤器

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
Run Code Online (Sandbox Code Playgroud)

传递所有字段的空蜇似乎在结束时间产生NIL值.


小智 2

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

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

将参数值设为 nil 没有帮助,您需要从 params 哈希中拒绝该键;例如

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