コレジャナイ警察

フォームは普通のこんなやつです

1
2
開始日:<input type="date" name="start_date">
終了日:<input type="date" name="end_date">

次のように入力すると、

  • [開始日] 7/25
  • [終了日] 7/25
1
2
// 発行されるSQL
( start_date >= '2018-07-25 00:00:00' AND end_date <= '2018-07-25 00:00:00')

コレだと、25日中のレコードを検索しようと思うと、以下のように入力しないといけない

  • [開始日] 7/25
  • [終了日] 7/26
1
2
// 発行されるSQL
( start_date >= '2018-07-25 00:00:00' AND end_date <= '2018-07-26 00:00:00')

しかし、本来の期待値はコレ↓であってほしい

  • [開始日] 7/25
  • [終了日] 7/25
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, ...