2010-07-18 140 views
5

我通过get发送数据,我需要将它放入一个int数组中以用于查找。 这里是我的代码:ruby​​ rails将params转换为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) 

支架在阵列周围缺失

谢谢,早上好!

亚历

回答

14

只要把括号在你的?

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

而且,你的第一个片段可以折叠下来:

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

感谢您的帮助! 这是什么意思&:? – Alex 2010-07-18 09:12:09

+1

这是一种简单的方法,将一个只调用给定方法的块传递给块中的参数。有一个很好的解释http://pragdave.pragprog.com/pragdave/2005/11/symbolto_proc.html – Gareth 2010-07-18 09:14:27

+0

谢谢,ruby是如此酷的语言! – Alex 2010-07-18 09:40:40

1

你正在整个转换是不必要的。您可以将字符串数组作为输入传递给查询(只要字符串值表示数字)。

你可以让你在同一行所需要的:

Candidate.find_all_by_id(params[`candidate`]) 

这是一样的:

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

这是相同的:

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

你原来的企图没有因为你没有在IN条款之后放置括号。