あるモデルが持つ3つ以上のカラムに対し、OR条件で複数同時検索を行いたいです。
あるモデルが、job1,job2,job3,job4,job5カラムを持っているとし、検索画面ではjob1job5に入りうる値を指定したチェックボックスを設置し、チェックした値がどれか1つでもjob1job5に入っている場合にあるモデルのデータを取り出す、という処理を行いたいです。
カラムが2つの場合は、ransackで簡単に記述が出来たのですが、3つ以上だとうまくいきませんでした。
そのため、複雑なscopeを書くことになると思うのですが、scopeの書き方にまだ慣れておらず、対処法がわかりません。
ruby
1scope :by_job, ->(input){ 2 joins(:applicant_basic).where("job1 = ? or job2 = ? or job3 = ? or job4 = ? or job5 = ?",input,input,input,input,input) 3 }
上記のようなscopeで、とりあえずチェックした値が1つの場合にはその値に応じたデータを取得することに成功しました。
しかし、複数以上チェックを入れた状態で検索をかけると、
「wrong number of arguments (2 for 1)」というエラーが出てしまいます。
どのような記述をすれば、望むような機能を実装できるでしょうか。
知恵をお貸しして頂けないでしょうか。
よろしくお願いいたします。
追記
ruby
1#1つずつの検索 → 成功 2#この状態で複数選択をしても、順番が最後の選択肢のみが1つだけ適用される 3<label><%= f.check_box :by_job, {}, "職業1" ,nil %>職業1</label> 4<label><%= f.check_box :by_job, {}, "職業2" ,nil %>職業2</label> 5<label><%= f.check_box :by_job, {}, "職業3" ,nil %>職業3</label> 6<label><%= f.check_box :by_job , {}, "職業4",nil %>職業4</label> 7 8#複数OR検索 → 失敗 9<label><%= f.check_box :by_job, {multiple: true}, "職業1" ,nil %>職業1</label> 10<label><%= f.check_box :by_job, {multiple: true}, "職業2" ,nil %>職業2</label> 11<label><%= f.check_box :by_job, {multiple: true}, "職業3" ,nil %>職業3</label> 12<label><%= f.check_box :by_job , {multiple:true}, "職業4",nil %>職業4</label>
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/08/21 02:24
2015/08/21 05:04
2015/08/21 06:14
2015/08/21 06:29
2015/08/22 11:19