2010-08-27 12 views
5

मैं ActiveRecord 3 में 'OR' sql कथन बनाने की कोशिश कर रहा हूं, मैंने सभी प्रकार की विविधताओं को आजमाया लेकिन इसे समझ नहीं पाया ...मैं ActiveRecord में 'OR' कथन कैसे बना सकता हूं?

उदाहरण के लिए मैं इस क्वेरी को एकाधिक 'channel_ids' शामिल करना चाहता हूं और क्या यह किसी भी चैनल आईडी के लिए सभी पोस्ट वापस कर चुका है। यह एक के लिए काम करता है:

Post.where(:user => 'mike').where(:channel_id => 0).limit(20) 

लेकिन मैं यह पता लगाने नहीं कर सकते कि कैसे गुणकों के साथ यह करने के लिए, मैं उदाहरण के लिए कोशिश की है:

Post.where(:user => 'mike').where(:channel_id => ?, [0,1,2,3]).limit(20) 

लेकिन यह काम नहीं किया। मै इसे काम मे कैसे ले सकता हूँ?

उत्तर

4

यह करने के लिए Arel विधियों का उपयोग करें:

t = Post.arel_table 
ids = [1,2,3] 

Post.where(
    t[:user].eq("mike").or(t[:channel_id].in(ids)) 
) 
+0

सही काम करता है, बहुत धन्यवाद। पहले एरियल की सुनवाई और अब इसे पढ़ लेंगे। इतना साफ। –

4

इस प्रयास करें:

Post.where("posts.user = ? OR posts.channel_id IN (?)", "mike", ids) 
+1

आप ActiveRecord आप के लिए भागने सूचियों के बजाय खुद ही कर देना चाहिए। आप वहां 'ids' को छोड़ सकते हैं, जैसा कि' शामिल 'नहीं है और इसे आपके लिए स्वचालित रूप से अल्पविराम से अलग सूची में विस्तारित किया जाएगा। – tadman

+1

@tadman, thx, उत्तर को अद्यतन किया गया। –

संबंधित मुद्दे