検索 scope whereの記述の仕方
現在scopeで検索フォーム作っています。検索は2つモデルと1つのモデルから複数のカラムを検索したいのですが記述がわかりません。現在は2つのモデルで1つずつのカラムの検索はできたのですが、複数のカラムがわからず悩んでいます。 以下該当箇所載せます
order.rb
scope :search_by_keyword, -> (keyword) {
where("orders.name LIKE :keyword", keyword: "%#{sanitize_sql_like(keyword)}%") if keyword.present?
}
ここのscopeに複数カラムを持たせたいのですが、上記は正常に動作する記述でして、ここにorで足してkeyword:も足せばいいかと思ったのですがエラーが出てきてしまいました。
エラーがでたorder.rbの記述
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?
}
エラー内容
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%'))
一応参考までにorders_controller.rbの記述です
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
あと一応view/orders/index
<div>
<%= form_tag(orders_path, method: :get) do %>
<div>
<%= search_field_tag "q", params[:q], placeholder: "キーワード検索" %>
<span>
<%= submit_tag "検索" %>
</span>
</div>
<% end %>
</div>
以上です。scopeの中、というより、whereの書方かもしれませんが複数の場合が全くわからないのでもしお分かりになる方いましたら宜しくお願いしますm(._.)m