Rails как получить параметр массива в кавычках и через запятую в запросе. - PullRequest
1 голос
/ 29 июля 2011

Рельсы 2,35

Возможно, я ошибаюсь, но я подумал, что с массивом в параметре rails должен был разделять массив при использовании, как показано ниже для запроса. Я знаю, что могу разбить параметр на одну строку в кавычках и через запятую. Мне было просто любопытно, может ли это быть сделано Rails автоматически, и как я могу это сделать, если так. Спасибо

Отправляемые параметры:

Parameters: {"method"=>:get, "id"=>["3", "1", "4"]}

Оператор SQL в используемом контроллере:

sql = "SELECT user.user_alias from users " +
"where user.id in (#{params[:id]}) " +
"AND user.user_alias is NOT NULL "
aliases = User.find_by_sql(sql)

Строка SQL выводит Rails (результаты запроса в операторе IN просто все вместе '314):

SELECT User.user_alias 
from lte_users
where user.id in (314) 
AND user.user_alias is NOT NULL 

Ответы [ 3 ]

1 голос
/ 29 июля 2011

НИКОГДА , никогда не выполняйте конкатенацию строк в запросе SQL, так как кто-то может использовать это для выполнения SQL-инъекции атаки на ваше веб-приложение.

Вы должны делать это так:

sql = %Q{SELECT user.user_alias from users
  where user.id in (?) 
  AND user.user_alias is NOT NULL }
aliases = User.find_by_sql([ sql, params[:id] ])
0 голосов
/ 29 июля 2011

Если вам отчаянно не нужна производительность без создания объектов ActiveRecord для нескольких возвращенных записей, я бы сделал это идиоматически, как:

aliases = User.all(
  :conditions => ['id IN (?) AND user_alias IS NOT NULL', params[:id]
  ).map(&:user_alias)
0 голосов
/ 29 июля 2011

Попробуйте:

where user.id in (#{params[:id].join(',')})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...