teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

質問文を誤読していて、and条件だったようなので、追記します。

2018/07/26 15:48

投稿

takumiabe
takumiabe

スコア661

answer CHANGED
@@ -1,3 +1,24 @@
1
+ 質問文を誤読していて、and条件だったようなので、追記します。
2
+
3
+ これで動くと思います。
4
+
5
+ ```rb
6
+ scope :search_by_keywords, -> (keywords) {
7
+ all.tap do |q|
8
+ keywords.each {|keyword| q.where!("users.nickname LIKE :keyword", keyword: "%#{sanitize_sql_like(keyword)}%") }
9
+ end
10
+ }
11
+ ```
12
+
13
+ scope環境の`self`は`ActiveRecord::Relations`になると思っていたのですが、
14
+ どうやら勘違いでした。
15
+ なので、`#where!`を使うには`#all`で明示的に引っ張り出す必要がありました。
16
+
17
+
18
+
19
+ ------
20
+ or条件の場合
21
+
1
22
  `search_by_keyword` scopeを複数単語に対応させたいのですね。
2
23
 
3
24
  僕ならこんなふうに書きます。