如何选择Rails时间以仅显示没有分钟的小时部分?基本上我想要的是显示带有start_time
和end_time
的时间过滤器,并使用Ransack
gem来过滤查询。
# db
create_table "schedules"
t.time "start_time"
t.time "end_time"
# controller
@q = Schedule.ransack(params[:q])
@q.sorts = ['date asc', 'start_time asc', 'end_time asc'] if @q.sorts.empty?
@schedules = @q.result.includes(:klass, :partner, :city)
#view
<%= search_form_for @q do |f| %>
<%= f.label :start_time_gteq, "Start time" %>
<%= f.select_hour :start_time_gteq, start_hour: 5, end_hour: 23 %>
<%= f.submit "Filter" %>
<% end %>
但它给了我这个错误:
undefined method `select_hour' for #<Ransack::Helpers::FormBuilder:0x007fb85217e000>
我也尝试过:
<%= f.time_select :start_time_eq, start_hour: 5, end_hour: 23 %>
...但它显示了分钟部分。我使用API进行了检查,但没有办法只显示time_select
的小时数。
修改
显然有一种方法可以删除分钟部分:
<%= f.time_select :start_time_gteq, discard_minute: true %>
不幸的是,它还会生成隐藏的输入标记,这些标记默认为系统的当前分钟,这使得过滤无效。
答案 0 :(得分:2)
也许现在是时候生成自己的自定义选择而不是试图强制适应Rails助手......也许是这样的:
<%= f.label "start_hour_eq", "Start time" %>
<%= f.select "start_hour_eq", (5..23).to_a %>:00
根据Ransack所期望的输入,您可能需要调整名称和/或包含分钟的隐藏字段:
= hidden_field_tag "start_minute_eq", 0
答案 1 :(得分:0)
怎么样:https://apidock.com/rails/ActionView/Helpers/DateHelper/select_hour
select_hour(datetime,options = {},html_options = {})public
在选择了当前小时的情况下,返回选择标签,其中包含0到23的每个小时的选项。