How do I make Rails time select to show only the hour part without the minutes? Basically what I want is to show a time filter with start_time
and end_time
and use Ransack
gem to filter the query.
# 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 %>
But it gives me this error:
undefined method `select_hour' for #<Ransack::Helpers::FormBuilder:0x007fb85217e000>
I also tried:
<%= f.time_select :start_time_eq, start_hour: 5, end_hour: 23 %>
...but it shows the minute part. I checked with the API but there's no way to show only hours with the time_select
.
EDIT:
Apparently there is a way to remove the minute part:
<%= f.time_select :start_time_gteq, discard_minute: true %>
Unfortunately it also generates hidden input tags that defaulted to the system's current minute, which made the filtering useless.
{minute_step: 00}
withtime_select
? – Hockeystep can't be 0
– Frankforter