У меня есть таблица, в которой пользователь может фильтровать различными способами, используя множество различных типов комбинаций. Со всеми входными данными, которые я получаю от пользователя, для меня было важно избежать пользовательских данных из SQL, что приводит к проблеме, с которой я сейчас сталкиваюсь.У меня есть два массива, которые динамически создаются на основе параметров, отправленных в действие, один массив содержит предложения SQL, а другой содержит значения, которые должны быть соединены с его соответствующим калюсом... так, например...
def results
sql_clauses = Array.new
sql_args = Array.new
unless params[:elapsed_time].nil?
sql_clauses << "elapsed_time = ?"
sql_args << params[:elaped_time]
end
unless params[:age_greater_than].nil?
sql_clauses << "age > ?"
sql_args << params[:age_greater_than]
end
.....
@results = Model.where(sql_clauses.join(" and "), sql_args.join(", "))
end
Теперь это без проблем отправляет массив sql_clauses в метод where. Но он терпит неудачу со вторым аргументом, потому что возвращает одну строку и ожидает отдельные переменные в соответствии с каждым из "?" поля, которые появляются в массиве sql_clauses. Я пробовал решения, предложенные КандадаБоггу на Comine массивы условий в рельсах. Ни один из этих вариантов мне не помог, но, возможно, это связано с тем, что я использую 2 массива вместо 1.
Кто-нибудь знает решение моей проблемы?