2010-07-18 13 views
5

मैं डेटा के माध्यम से डेटा भेज रहा हूं और मुझे इसे खोजने में उपयोग करने के लिए एक int सरणी में रखना होगा। यहाँ मेरी कोड है:रूबी रेलों को int array में int array

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

मेरे यूआरएल इस

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

+1

यह ब्लॉक को पारित करने का एक आसान तरीका है जो ब्लॉक में पारित तर्क पर दी गई विधि को केवल कॉल करता है। Http://pragdave.pragprog.com/pragdave/2005/11/symbolto_proc.html – Gareth

+0

पर एक अच्छी व्याख्या है धन्यवाद, रूबी इतनी अच्छी भाषा है! – Alex

1

पूरे रूपांतरण आप कर रहे हैं अनावश्यक है। आप स्ट्रिंग सरणी को क्वेरी में इनपुट के रूप में पास कर सकते हैं (जब तक स्ट्रिंग मान संख्याओं का प्रतिनिधित्व करते हैं)।

आप क्या आप एक पंक्ति में जरूरत प्राप्त कर सकते हैं:

Candidate.find_all_by_id(params[`candidate`]) 

ही है कौन सा रूप में:

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

कौन सा एक ही प्रकार है:

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

आपका मूल प्रयास नहीं किया है काम करें क्योंकि आपने IN खंड के बाद ब्रैकेट नहीं लगाए हैं।