

現在scopeで検索フォーム作っています。検索は２つモデルと１つのモデルから複数のカラムを検索したいのですが記述がわかりません。現在は２つのモデルで１つずつのカラムの検索はできたのですが、複数のカラムがわからず悩んでいます。
以下該当箇所載せます

order.rb

[code]

       scope :search_by_keyword, -> (keyword) {
          where("orders.name LIKE :keyword", keyword: "%#{sanitize_sql_like(keyword)}%") if keyword.present?
       }
    
[/code]

ここのscopeに複数カラムを持たせたいのですが、上記は正常に動作する記述でして、ここにorで足してkeyword:も足せばいいかと思ったのですがエラーが出てきてしまいました。

エラーがでたorder.rbの記述

[code]

       scope :search_by_keyword, -> (keyword) {
          where("orders.name LIKE or orders.address LIKE :keyword", keyword: "%#{sanitize_sql_like(keyword)}%", keyword: "%#{sanitize_sql_like(keyword)}%") if keyword.present?
       }
    
[/code]

エラー内容

[code]

    SQLite3::SQLException: near "or": syntax error: SELECT COUNT(*) FROM "orders" INNER JOIN "users" ON "users"."id" = "orders"."user_id" WHERE ((users.name LIKE '%take%') OR (orders.name LIKE or orders.address LIKE '%take%'))
    
[/code]

一応参考までにorders_controller.rbの記述です

[code]

    def index
      if params[:q]
        relation = Order.joins(:user)
        @orders = relation.merge(User.search_by_keyword(params[:q]))
                        .or(relation.search_by_keyword(params[:q]))
                        .paginate(page: params[:page])
      else
        @orders = Order.paginate(:page => params[:page], :per_page => 10)
      end
    end
    
[/code]

あと一応view/orders/index

[code]

     <div>
      <%= form_tag(orders_path, method: :get) do %>
        <div>
          <%= search_field_tag "q", params[:q], placeholder: "キーワード検索" %>
          <span>
            <%= submit_tag "検索" %>
          </span>
        </div>
      <% end %>
    </div>
    
[/code]

以上です。scopeの中、というより、whereの書方かもしれませんが複数の場合が全くわからないのでもしお分かりになる方いましたら宜しくお願いしますm(._.)m


CC BY-SA 4.0
2018-05-14T11:35:05.040
43982
2019-05-29T05:03:05.373
27359
question
ruby-on-rails ruby
検索 scope whereの記述の仕方


自己解決できました。

該当部分を

[code]

    scope :search_by_keyword, -> (keyword) {
      where("(orders.name LIKE :keyword) OR (orders.address LIKE :keyword)", keyword: "%#{sanitize_sql_like(keyword)}%") if keyword.present?
    }
    
[/code]

（）でくくって:keywordも（）に入れるのが正解みたいでした。エラー時に書いてたように後半部分は繰り返さないでよかったみたいです。


CC BY-SA 4.0
2018-05-14T11:55:59.097
43983
2018-05-14T11:55:59.097
27359
43982
answer