У меня есть форма поиска Rails, которая выполняет динамический запрос. То есть, пользователь вводит поиск, как:Rails SQL-запрос на неизвестном (динамическом) числе запросов с использованием LIKE
(hobby="skiing") OR (gender="male" AND hobby="jogging")
Так что, я не знаю, сколько запросов я не буду искать с помощью только во время выполнения.
я анализирую поискового запроса путем преобразования его в правильный запрос SQL, так что вышеупомянутый поиск будет преобразован в следующий формат:
query = "hobby LIKE ? OR (gender LIKE ? AND hobby LIKE ?)"
queries = ["skiing", "male", "jogging"]
Для следующего запроса:
where(query, queries)
Однако , общий синтаксис поискового запроса Rails очень ограничен:
where(query, query_1, query_2, query_3)
I не может заменить аргументы «query_n» таким массивом, как я хочу, без Rails, бросающего ошибку.
NoMethodError (undefined method `where' for ["a", "b", "c"]:Array)
Попытка splat массив дает ту же ошибку:
where(query, *queries)
снова:
NoMethodError (undefined method `where' for ["a", "b", "c"]:Array)
Так что я могу сделать?
EDIT:
Полная функция поиска выглядит следующим образом:
def self.search(search)
query = "%#{search}%"
if search
includes(:games, :jobs)
strngs = ["hobby = ? OR name = ? OR gender = ?", "dsfgdsfg", "dsgsdfgsd", "sdfsfsdf"]
.where(strngs)
Можете ли вы дать немного больше информации о том, какая информация отправляется через форму поиска (каждое значение присваивается его атрибуту?)? Кроме того, запросы в массиве всегда находятся в правильном порядке (att_1, att_2 и т. Д.)? –