ransack에서 월별 검색 수행(Custom Predicates)

2511 단어 ransackRails

개요


ransack을 사용할 때 월간 검색을 사용하고 싶어서 다음과 같은 내용을 실현하였습니다.
↓ 예: 2020년 12월을 선택한 후 2020년 12/1-202/12/31 검색

이루어지다


검색용 술어(Predicate)를 만듭니다.
add_predicate에 술어를 추가하고 술어의 명칭은'during month'에서 실현된다.
# config/initializers/ransack.rb

Ransack.configure do |config|
  config.add_predicate :during_month,
                        :arel_predicate => :between,
                        :formatter => proc { |v|
                          unless v.month == 12 # 12月度以外の処理
                            #月末日をenddayに代入 v.monthを+1して最後にdateを1引くことで月末日を取得している。
                            endday = Time.zone.parse("#{v.year}-#{v.month + 1}-1").to_date - 1
                          else # 12月度の処理
                            # 12月度の時はv.monthはインクリメントしない(エラー回避)
                            # v.yearを+1で翌年に、monthは1月固定、
                            # 最後に1日に固定したdateを1引くことで12月の末日をenddayに代入している。
                            endday = Time.zone.parse("#{v.year + 1}-1-1").to_date - 1
                          end
                          #検索月の初日から月末日まで
                          Time.zone.parse("#{v.year}-#{v.month}-1").to_date..endday
                        },
                        :type => :date
end
View 측 설치
<%= search_form_for "検索オブジェクト", url: "アクション" do |f| %>
  <%= f.label :search_day, "期間"%>
  <%= raw sprintf(
      f.date_select(
        :search_day_during_month,
        discard_day: true,
        use_month_numbers: true,
        date_separator: '%s'),
      '年 ') + '月' %>
  <div class="actions ransack-submit"><%= f.submit "検索" %></div>
<% end %>

참고 자료


ransack에서 연간 검색 실시
https://qiita.com/tanakaworld/items/c7a2613589dadbb2ef4d
Custom Predicates · activerecord-hackery/ransack Wiki
https://github.com/activerecord-hackery/ransack/wiki/Custom-Predicates

좋은 웹페이지 즐겨찾기