У меня есть область, которая выглядит так:
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
Проблема в том, что если у меня есть два атрибута, «имя» и «возраст», и только «имя» совпадает с «foo», он все равно доставит мне все записи, соответствующие «foo». Я хочу иметь возможность связывать эти вызовы области действия с чем-то вроде оператора «и» между ними, чтобы, например, «имя» и «возраст» должны были получить совпадение, чтобы получить какие-либо записи.
Возможно, я пытаюсь сделать это неправильным или неэффективным способом?