ruby rails преобразует параметры в массив int - PullRequest
5 голосов
/ 18 июля 2010

Я отправляю данные через get, и мне нужно поместить их в массив int для использования в находке.вот мой код:

@found = Array.new
  params['candidate'].each do |c|
  @found << c.to_i
  end

Мой URL выглядит следующим образом

http://localhost:3000/export/candidate?candidate[]=3&candidate[]=4&commit=Export

Если есть какая-то разница, я использую его для этой находки

@candidate = Candidate.find(:all, :conditions => ["candidates.id IN ?", @found]) 

Нов настоящее время он не помещается в реальный массив, потому что я получаю эту ошибку

Mysql::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '4)' at line 1: SELECT * FROM `candidates` WHERE (candidates.id IN 4,2)

Вокруг массива отсутствуют скобки

Спасибо и доброе утро!

Алекс

Ответы [ 2 ]

15 голосов
/ 18 июля 2010

Просто поставьте скобки вокруг своего?

@candidate = Candidate.find(:all, :conditions => ["candidates.id IN (?)", @found]) 

Кроме того, ваш первый фрагмент может быть свернут до:

@found = params['candidate'].map(&:to_i)
1 голос
/ 18 июля 2010

Вся конверсия, которую вы делаете, не нужна.Вы можете передать массив строк в качестве входных данных для запроса (при условии, что значения строк представляют собой числа).

В одной строке вы можете получить то, что вам нужно:

Candidate.find_all_by_id(params[`candidate`])

Что совпадает с:

Candidate.find(:all, :conditions => {:id => params[`candidate`]})

Что совпадает с:

Candidate.find(:all, :conditions => ["id IN (?)",params[`candidate`]])

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

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