Rails时间选择仅显示小时?

时间:2015-06-23 16:43:45

标签: ruby-on-rails ruby-on-rails-4 drop-down-menu ransack

如何选择Rails时间以仅显示没有分钟的小时部分?基本上我想要的是显示带有start_timeend_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 %>

不幸的是,它还会生成隐藏的输入标记,这些标记默认为系统的当前分钟,这使得过滤无效。

2 个答案:

答案 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的每个小时的选项。