ransackで日付の検索機能を実装しております。
やりたいこと
現在ダッシュボード画面で、記事と、コメントの一覧を表示させており、
日付の検索フォームに値を入れた際に、絞込みをする機能を追加したいです。
現状できていること
検索フォームから、値を入力し検索すると、記事に関しては絞込ができている
できてないこと
コメント一覧は絞りこみができてない
実装周り
検索したい対象と、そのカラム
Articleモデル approved_date Commentモデル created_at
ransackで検索後のパラメータの中身
params[:q] => {"approved_date_cont"=>"2016-06-01"}
理想は以下のように、params[:q]だけで、
Articleのapproved_dateと
Commentのcreated_atの日付検索がすむことです。
dashboard_controller
@search = Article.search(params[:q]) @articles = @search.result @search = Comment.search(params[:q]) @comments = @search.result
注意点
今回の仕様が少し特殊で
Articleのapproved_dateというのは、月初しか行わず、
必ず、月の最初の日付しか入りません。
そのため、絞込も月初(◯月1日)という値を期待してます。
その一方、Commentの方は、月単位で、検索したいため、余計に検索が複雑になっております。
対策として考えたこと
次のようなコメント用の検索期間をcontroller側で取得し、それをもとに、Commentをwhere文で
絞込みをする
comment_start_date = params[:q][:approved_date_cont].to_date comment_end_date = comment_start_date.end_of_month
しかし、この方法だと、params[:q]がnilの場合や、その他、バグが混在しそうで、
あまりいい方法でない気がします。
本件のようなケースにおいて、良い解決方法がありましたら、
是非ご教授頂けますと幸いです。
よろしくお願いします。
あなたの回答
tips
プレビュー