2010-07-18 23 views
5

Tôi đang gửi dữ liệu qua nhận và tôi cần đặt nó vào một mảng int để được sử dụng trong tìm kiếm. đây là mã của tôi:đường ray ruby ​​chuyển đổi các tham số thành int mảng

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

url của tôi trông như thế này

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

Nếu nó làm cho bất kỳ sự khác biệt Tôi đang sử dụng nó cho việc này tìm

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

Nhưng hiện nó không đặt nó vào một mảng thực bởi vì tôi gặp lỗi này

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) 

Dấu ngoặc bị thiếu xung quanh mảng

Cảm ơn và chào buổi sáng!

Alex

Trả lời

14

Chỉ cần đặt dấu ngoặc ôm quanh bạn?

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

Ngoài ra, đoạn đầu tiên của bạn có thể bị sập xuống:

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

Cảm ơn sự giúp đỡ của bạn! điều này có ý nghĩa gì &:? – Alex

+1

Đó là cách dễ dàng để truyền một khối chỉ gọi phương thức đã cho trên đối số được truyền vào khối. Có một lời giải thích tốt tại http://pragdave.pragprog.com/pragdave/2005/11/symbolto_proc.html – Gareth

+0

Cảm ơn, ruby ​​là một ngôn ngữ tuyệt vời! – Alex

1

Toàn bộ chuyển đổi bạn đang làm là không cần thiết. Bạn có thể chuyển mảng chuỗi làm đầu vào cho truy vấn (miễn là các giá trị chuỗi đại diện cho các số).

Bạn có thể có được những gì bạn cần trong một dòng:

Candidate.find_all_by_id(params[`candidate`]) 

Đó là giống như:

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

Đó là giống như:

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

nỗ lực ban đầu của bạn không làm việc vì bạn không đặt dấu ngoặc sau mệnh đề IN.

Các vấn đề liên quan