前提・実現したいこと
Railsでアプリ開発中です
EventモデルからRansackを利用した検索機能を実装しました。
検索項目は 「イベント名」、「曜日」、「レベル」、「種目」、「ステータス」の5つです。
イベント詳細画面でチェックを入れて送信し、searchアクションを動かした後のビューで、「レベル」、「種目」はチェックを保持していますが、曜日だけ保持されません。
違いとしては、曜日のカラムはテーブルに存在しておらず、ransackerを用いて定義していることです。
そこに原因があるのか考え調べましたがどうしても解決策が分からなかったので質問させていただきました。
チェックしたしないで送信されるパラメータに何か変化があるのかと疑いましたが特に分からず。。。
何をもってチェックされているされていないを判断しているのかも併せてご教授頂けると助かります。
現状:検索後、曜日検索のチェックボックスだけチェックが外れてしまう
実現したいこと:検索後もチェックを保持したい
キャプチャ動画です
https://gyazo.com/151a39ccef5ebbeef6060bf7fa9204fe
何卒よろしくおねがい致します。
該当のソースコード
ruby
1#event.rb 2 enum dayw: {"月": 1,"火": 2,"水": 3,"木": 4,"金": 5,"土": 6,"日": 0} 3 enum level: {"初級": '初級',"初中級": '初中級',"中級": '中級',"中上級": '中上級',"上級": '上級'} 4 enum play_type: {"シングルス": 'シングルス',"ダブルス": 'ダブルス'} 5 6 private 7 ransacker :dayw do 8 Arel.sql("date_format(event_date,'%w')") 9 end 10
ruby
1#show.html.haml 2=search_form_for(@q, url:search_prefecture_path) do |f| 3 .field 4 = f.label :title_cont,'オフ名で検索' 5 = f.search_field :title_cont 6 .field 7 = f.label :dayw_in,'曜日で検索' 8 = f.collection_check_boxes :dayw_in, Event.dayws, :last, :first 9 .field 10 = f.label :level_in,'レベルで検索' 11 = f.collection_check_boxes :level_in, Event.levels, :last, :first 12 .field 13 = f.label :play_type_in,'種目で検索' 14 = f.collection_check_boxes :play_type_in, Event.play_types, :last, :first 15 .field 16 - f.label :status_eq,'ステータスで検索' 17 = f.collection_select :status_eq, Event.statuses, :last, :first, prompt: true 18 .field 19 = f.submit :検索
ruby
1#prefecture_controller.rb 2class PrefecturesController < ApplicationController 3 def show 4 @prefecture = Prefecture.find(params[:id]) 5 @events = @prefecture.events 6 @q = Event.ransack 7 @venues = @events.group(:latitude).order(:id) 8 gon.venues = @venues 9 duplicate = @events.group(:latitude).having('count(*)>=2').pluck(:latitude) 10 gon.events = Event.where(latitude: duplicate).offset(1) 11 end 12 13 def search 14 15 @prefecture = Prefecture.find(params[:id]) 16 @q = Event.ransack(search_params) 17 @events = @q.result(distinct: true) 18 @venues = @events.group(:latitude).order(:id) 19 gon.venues = @venues 20 duplicate = @events.group(:latitude).having('count(*)>=2').pluck(:latitude) 21 gon.events = Event.where(latitude: duplicate).offset(1) 22 end 23 24 private 25 26 def search_params 27 params.require(:q).permit(:title_cont,{:dayw_in => []},{:level_in => []},{:play_type_in => []},:status_eq) 28 end 29 30end 31
あなたの回答
tips
プレビュー