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

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

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

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

Q&A

解決済

1回答

811閲覧

検索での複合条件のモデルの部分がうまく設定できない

avicii

総合スコア49

Ruby on Rails 4

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

0グッド

0クリップ

投稿2019/01/02 08:31

今、現在、検索機能の拡張をしようと思っています。私がしたいと思っている拡張は、複合条件で検索ができるようにすることです。しかし、今回変化を加えたのですが、modelが機能しなくなり、動かなくなってしまいました。どうぞ教えていただえたら嬉しいです。

イメージ説明

View

1 <div class="david"> 2 <%= form_tag plans_path, :method => 'get', :class => 'david' do %> 3 <p><strong>Place: </strong></p> 4 <div style="width: 250px;" placeholder="date" > 5 <p><%= text_field_tag :datetimes, params[:search1] %></p> 6 <p><%= text_field_tag :title, params[:search2] %></p> 7 <%= submit_tag "Search", :name => nil %> 8 </div> 9 <% end %> 10</div>

controller

1 2 def index 3 @plans = Plan.includes(:guider).page(params[:page]).per(5).order("created_at DESC") 4 @plans = Plan.page(params[:page]).per(5).order("created_at DESC").search(params[:search]) 5 end

model

1 def 2 def self.search(search) 3 if search 4 Plan.where("(datetimes like ?) AND (title = ?)", , "%params[:search1]%", "%params[:search2]%") 5 else 6 Plan.all 7 end 8 end 9 10 end

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ruby

1Plan.where("(datetimes like ?) AND (title = ?)", , "%params[:search1]%", "%params[:search2]%")

この行について3つほど問題があります。

  1. , ,と余計なコンマが入って文法エラーとなっています。
  2. "%params[:search1]%"と書いても変数展開はなされないので、そのままの意味となってしまいます。正しくは、"%#{params[:search1]}%"とする必要があります。
  3. LIKEの引数にする場合、%_はエスケープしないと、その文字がワイルドカードとして処理されるので、入力したとおりに検索されません(とりあえず、ここへの対応は省略しますが)。

上2つの問題に対応して書き直すと、以下のようになります。

ruby

1Plan.where("(datetimes like ?) AND (title = ?)", "%#{params[:search1]}%", "%#{params[:search2]}%")

投稿2019/01/02 08:53

maisumakun

総合スコア145121

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

avicii

2019/01/02 12:59

あと、もう一つ聞きたいことがあります。この条件で、titileとdatetimesの両方が一致したレコードが出るような設定になっているのか?それとも、書いているコード自体が違うのか?(うまく検索しても、結果が出てこなかったので、聞かせてもらってます。)
maisumakun

2019/01/02 13:10

titleのほうがLIKEではなく=になっているのが問題のようです(見落としていました)。
avicii

2019/01/02 14:25

度々ありがとうございます。
avicii

2019/01/02 15:33

controllerのindexの部分のsearchの後の部分も、search1,2を加えたほうがいいですか? 度々ありがとうございます。よろしくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問