Railsのransackの日付で期間検索がコレジャナイ感がしたので作った
コレジャナイ警察
フォームは普通のこんなやつです
1 2
| 開始日:<input type="date" name="start_date"> 終了日:<input type="date" name="end_date">
|
次のように入力すると、
1 2
| // 発行されるSQL ( start_date >= '2018-07-25 00:00:00' AND end_date <= '2018-07-25 00:00:00')
|
コレだと、25日中のレコードを検索しようと思うと、以下のように入力しないといけない
1 2
| // 発行されるSQL ( start_date >= '2018-07-25 00:00:00' AND end_date <= '2018-07-26 00:00:00')
|
しかし、本来の期待値はコレ↓であってほしい
1 2
| // 発行されるSQL ( start_date >= '2018-07-25 00:00:00' AND end_date <= '2018-07-25 23:59:59')
|
作った
initializers内は、pumaの再起動が必要です
1 2 3 4 5 6 7 8 9 10 11 12
| // config/initializers/ransack.rb Ransack.configure do |config| config.add_predicate 'gteq_starttime', arel_predicate: 'gteq', formatter: -> (v) { v + " 00:00:00" }, type: :string
config.add_predicate 'lteq_endtime', arel_predicate: 'lteq', formatter: -> (v) { v + " 23:59:59" }, type: :string end
|
1 2 3
| // erb側 開始日:<%= f.date_field :start_date_gteq_starttime, ... 終了日:<%= f.date_field :end_date_lteq_endtime, ...
|