2013-03-12 2 views
-1

Я пытаюсь сделать это:Rails заполнителя при создании массива

query << ["AND f.name LIKE '%:last_name%' ", :last_name => params[:last_name] ] 

Но получаю сообщение об ошибке. Конечно, синтаксис неверен. Кто-нибудь знает, как это сделать?

+0

Вы используете рельсы 3? – jvnill

+0

"ошибка"? какая ошибка? – Dogbert

+0

@ jvnill - Нет, я не –

ответ

1

Это массив или хэш? первый элемент выглядит как массив, а второй - как хэш. Без какого-то контекста трудно сказать. Вы можете начать, возможно, пытаюсь это:

["AND f.name LIKE '%:last_name%' ", {:last_name => params[:last_name]} ] 
+0

Это дает мне: AND f.name LIKE '%: last_name%' last_name 'some_last_name –

+1

Итак, укажите более подробную информацию. Что такое запрос? Почему вы добавляете этот массив к нему? – davidrac

+0

query is: query = [] Затем я добавляю в него строку. В конце я использую JOIN, и я хочу использовать placeholder, чтобы избежать SQL-инъекции. –

0

, так как вы не используете рельсы 3, вы должны использовать scoped в цепь запросов

records = Record.scoped(:conditions => { :active => true }) 
records = records.scoped(:conditions => ["records.name LIKE '%:last_name%' ", { :last_name => params[:last_name] }]) 

так что вам не придется строить запросы, как это.

+0

Но я хочу построить запрос по частям, так как он длинный, и JOIN все штук вместе. –

1

Где запрос массив вы можете передать строку, так что вы не в конечном итоге с массивом массивов, вы можете сделать это:

Rails 3

query << "AND f.name LIKE '%#{params[:last_name]}%' " 

Rails 2

last_name = ActionController::Base.helpers.sanitize(params[:last_name]) 
query << "AND f.name LIKE '%#{last_name}%' " 
+0

Это было, я начал, но он позволяет SQL Injection. –

+0

Если вы используете рельсы 3, он по умолчанию будет дезинфицировать вход пользователя. Если бы вы не могли просто передать параметры через ActionController :: Base.helpers.sanitize (params [: last_name]) – rant

+0

Я все равно получаю тот же результат ... –