回答編集履歴

1

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

2018/07/26 15:48

投稿

takumiabe
takumiabe

スコア661

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