2

各セッションで、すべての searchkick クエリに where 句を追加する必要があるユースケースがあります。これは基本的に、複数の DB に複数のクライアントからのデータがあり、searchkick インデックスに client_id というフィールドが含まれている場合です。

すべてのクエリに対してそれを続けたくありません。このセッションのすべての searchkick クエリに where: {client_id: "XXXX"} を追加する方法はありますか。

4

1 に答える 1

1

searchkickシングルトン メソッドを再定義して、クラス定義に次を追加した後、「where :」パラメータを自動的に追加できます。

class<<Product
  alias oldsearch search
    def search(s, l, o)
      oldsearch s, where: {client_id: "XXXX"}, limit: l, offset: o
    end
end

$ irb
2.2.0 :001 > class A

# searchkick adds his methods to your model like this:

2.2.0 :002?>   class<<self
2.2.0 :003?>     def a
2.2.0 :004?>       puts 'a'
2.2.0 :005?>       end
2.2.0 :006?>     end

# and you are adding following:

2.2.0 :007?>   class<<self
2.2.0 :008?>     alias b a
2.2.0 :009?>     def a
2.2.0 :010?>       puts 'a-new'
2.2.0 :011?>       b
2.2.0 :012?>       end
2.2.0 :013?>     end
2.2.0 :014?>   end
 => :a 
2.2.0 :015 > A.a #=> a-new
                 #   a

Product.searchそしてもちろん、必要なパラメーターで呼び出すラッパー メソッドを作成することもできます。

于 2015-03-11T00:29:28.980 に答える