質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Active Record

Active Recordは、一つのオブジェクトに対しドメインのロジックとストレージの抽象性を結合するデザインパターンです。

受付中

【Rails】複数のカラムからOR条件で、複数チェックボックスで選択した値から検索したい

jusco
jusco

総合スコア80

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Active Record

Active Recordは、一つのオブジェクトに対しドメインのロジックとストレージの抽象性を結合するデザインパターンです。

1回答

0評価

0クリップ

5686閲覧

投稿2015/08/18 09:19

編集2022/01/12 10:55

あるモデルが持つ3つ以上のカラムに対し、OR条件で複数同時検索を行いたいです。

あるモデルが、job1,job2,job3,job4,job5カラムを持っているとし、検索画面ではjob1job5に入りうる値を指定したチェックボックスを設置し、チェックした値がどれか1つでもjob1job5に入っている場合にあるモデルのデータを取り出す、という処理を行いたいです。

カラムが2つの場合は、ransackで簡単に記述が出来たのですが、3つ以上だとうまくいきませんでした。
そのため、複雑なscopeを書くことになると思うのですが、scopeの書き方にまだ慣れておらず、対処法がわかりません。

ruby

scope :by_job, ->(input){ joins(:applicant_basic).where("job1 = ? or job2 = ? or job3 = ? or job4 = ? or job5 = ?",input,input,input,input,input) }

上記のようなscopeで、とりあえずチェックした値が1つの場合にはその値に応じたデータを取得することに成功しました。
しかし、複数以上チェックを入れた状態で検索をかけると、
「wrong number of arguments (2 for 1)」というエラーが出てしまいます。

どのような記述をすれば、望むような機能を実装できるでしょうか。

知恵をお貸しして頂けないでしょうか。
よろしくお願いいたします。


追記

ruby

#1つずつの検索 → 成功 #この状態で複数選択をしても、順番が最後の選択肢のみが1つだけ適用される <label><%= f.check_box :by_job, {}, "職業1" ,nil %>職業1</label> <label><%= f.check_box :by_job, {}, "職業2" ,nil %>職業2</label> <label><%= f.check_box :by_job, {}, "職業3" ,nil %>職業3</label> <label><%= f.check_box :by_job , {}, "職業4",nil %>職業4</label> #複数OR検索 → 失敗 <label><%= f.check_box :by_job, {multiple: true}, "職業1" ,nil %>職業1</label> <label><%= f.check_box :by_job, {multiple: true}, "職業2" ,nil %>職業2</label> <label><%= f.check_box :by_job, {multiple: true}, "職業3" ,nil %>職業3</label> <label><%= f.check_box :by_job , {multiple:true}, "職業4",nil %>職業4</label>

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Active Record

Active Recordは、一つのオブジェクトに対しドメインのロジックとストレージの抽象性を結合するデザインパターンです。