рубиновые направляющие, преобразовывающие параметрические усилители в международный массив

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

@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)

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

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

Alex

5
задан Alex 18 July 2010 в 08:56
поделиться

2 ответа

Просто заключите скобки в скобки?

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

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

@found = params['candidate'].map(&:to_i)
16
ответ дан 18 December 2019 в 09:47
поделиться

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

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

Candidate.find_all_by_id(params[`candidate`])

То же, что:

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

То же, что:

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

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

1
ответ дан 18 December 2019 в 09:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: