Возможно ли иметь переменные условия поиска для ключа и значения? - PullRequest
3 голосов
/ 21 апреля 2010

Я пытаюсь передать как поле, так и значение в вызове поиска:

@employee = Employee.find(:all,
              :conditions => [ '? = ?', params[:key], params[:value].to_i)

Вывод

SELECT * FROM `employees` WHERE ('is_manager' = 1)

, который не возвращает результатов, однако когда япопробуйте это непосредственно в mysqsl, используя тот же вызов без '' вокруг is_manager, все работает нормально.Как преобразовать значение моего params [: key] в символ, чтобы результирующий вызов SQL выглядел так:

SELECT * FROM `employees` WHERE (is_manager = 1)

Спасибо, D

Ответы [ 3 ]

3 голосов
/ 21 апреля 2010

Если вы хотите преобразовать строку в символ (то, что производит params [: key], все, что вам нужно сделать, это

params[:key].to_s.to_sym

2 балла:

  1. Слово предостережения: символы не мусор.

  2. Убедитесь, что ваш ключ не является число, если вы сначала конвертируете в тогда to_sym, ваш код будет работать, но вы можете получить странный символ, как это:

    :"5"

1 голос
/ 21 апреля 2010

Вы можете использовать подстановку переменных для имени столбца вместо использования значений связывания:

# make sure the key passed is a valid column
if Employee.columns_hash[params[:key]]
  Employee.all :conditions => [ "#{params[:key]} = ?", params[:value]]
end

Вы можете дополнительно обезопасить решение, убедившись, что переданное имя столбца принадлежит предварительно выбранному набору .:

if ["first_name", "last_name"].include? [params[:key]]
  Employee.all :conditions => [ "#{params[:key]} = ?", params[:value]]
end
1 голос
/ 21 апреля 2010

"строка" .to_sym

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...