次のようなスコープがあります。
scope :attr_similar_to, -> (attr, strings) { where("#{attr} similar to ?", "%(#{strings})%") }
このスコープを使用する方法は、多数の属性を反復処理し、属性ごとに「strings」変数の複数の文字列のセットとともに属性をスコープに送信することです。これは、このスコープに「foo | bar」として送信されます。 |等」。そのため、属性ごとに、属性値がいずれかの文字列と類似しているかどうかを確認します。
このスコープを使用するループは次のようになります。
results = Model.none
attributes.each do |attr|
results += attr_similar_to(attr, strings)
end
問題は、"name" と "age" という 2 つの属性があり、"name" だけが "foo" に一致する場合でも、"foo" に一致するすべてのレコードを取得してしまうことです。これらのスコープ呼び出しを「and」演算子のようなものでチェーンできるようにしたいので、たとえば、レコードを取得するには「名前」と「年齢」の両方が一致する必要があります。
おそらく、これを間違った方法または非効率的な方法で行おうとしていますか?