2014-10-17 3 views
2

в моем проекте Rails Я пытаюсь использовать следующий запрос в поиске form_tagМассива значений Sql в Рубине

Student.joins(:courses).where(@params.joins(','), @values) 

где params и значение динамически построены массивы, так как есть некоторые дополнительные параметры поиска. Пример из моего кода:

if params[:date_begin] != '' 
    @params.push " courses.date_begin >= ? " 
    @values.push params[:date_begin] 
    end 

Проблема является @values массив рассматривается в качестве одного из аргументов и вызывает эту ошибку:

wrong number of bind variables (1 for 2)

Как сказать это, чтобы рассмотреть элементы массива по отдельности?

ответ

2

насчет построения запроса таким образом:

scope = Student.joins(:courses) 

if params[:date_begin].present? 
    scope = scope.where(" courses.date_begin >= ? ", params[:date_begin]) 
end 

scope 
+0

Отлично! Спасибо – Tiamon

1

Вы можете распаковать массив следующим образом:

Student.joins(:courses).where(@params.join('AND'), *@values) 

(Примечание Вы также должны изменить joins к join и запятые для AND).

2

Вы должны знак массива

Student.joins(:courses).where(@params.joins(','), *@values) 
+0

Я закончил тем, что использовал вышеупомянутый ответ, но ваш тоже отлично работает. Большое спасибо – Tiamon

+0

Этот ответ лучше отвечает на исходный вопрос, и IMO является более чистым – Yule

Смежные вопросы