Pertanyaan ruby rel mengkonversi params ke int array


Saya mengirim data melalui get dan saya harus memasukkannya ke dalam array int untuk digunakan dalam pencarian. ini kode saya:

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

Url saya terlihat seperti ini

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

Jika ada bedanya saya menggunakannya untuk menemukan ini

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

Tapi saat ini tidak memasukkannya ke dalam array nyata karena saya mendapatkan kesalahan ini

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)

Tanda kurung tidak ada di sekitar array

Terima kasih dan selamat pagi!

Alex


5
2017-07-18 08:56


asal


Jawaban:


Hanya menaruh tanda kurung di sekitar Anda?

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

Selain itu, cuplikan pertama Anda dapat diciutkan ke:

@found = params['candidate'].map(&:to_i)

15
2017-07-18 09:00



Seluruh konversi yang Anda buat tidak diperlukan. Anda dapat meneruskan string array sebagai input ke query (selama nilai string mewakili angka).

Anda bisa mendapatkan apa yang Anda butuhkan dalam satu baris:

Candidate.find_all_by_id(params[`candidate`])

Yang sama dengan:

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

Yang sama dengan:

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

Upaya asli Anda tidak berhasil karena Anda tidak memasang tanda kurung setelah IN ayat.


1
2017-07-18 13:44