2011-09-23 8 views
10

भीतर मैं एक साधारण मॉडलकैसे करना है AREL में सबक्वेरी पर मिलती रेल

class User 
    has_many :logs 


class Logs 

विदेशी कुंजी logs.user_id के माध्यम से हमेशा की तरह संबंधित है। मैं एरियल का उपयोग करके निम्नलिखित करने की कोशिश कर रहा हूं और एरियल दस्तावेज़ के अनुसार इसे काम करना चाहिए।

u_t = Arel::Table::new :users 
l_t = Arel::Table::new :logs 

counts = l_t. 
    group(l_t[:user_id]). 
    project(
     l_t[:user_id].as("user_id"), 
     l_t[:user_id].count.as("count_all") 
    ) 

l_t.joins(counts).on(l_t[:id].eq(counts[:user_id])) 

जब मैं यह है कि मैं त्रुटि

TypeError: Cannot visit Arel::SelectManager 

मिलता है हालांकि अरेल explicitly suggests के लेखक कि अरेल बात इस तरह का कर सकते हैं।

कृपया कच्चे एसक्यूएल, एक अन्य प्रकार की एरियल क्वेरी आदि के साथ एक ही प्रश्न कैसे प्राप्त कर सकते हैं, इस पर प्रतिक्रियाएं न लिखें। यह पैटर्न है जो मुझे इस क्वेरी के विशिष्ट परिणामों में दिलचस्पी नहीं है।

उत्तर

8

आप पुनः प्राप्त करने के अरेल :: नोड्स :: अरेल :: SelectManager के कहने से शामिल हों, और पारित कि मिलती है करने के लिए

अपने उदाहरण का उपयोग join_sources उपयोग कर सकते हैं:

l_t.joins(counts.join_sources).on(l_t[:id].eq(counts[:user_id])) 
+1

'l_t [: आईडी] .eq (मायने रखता है [: user_id]) 'क्या यह काम करता है? मेरा मतलब है, लॉग की आईडी उपयोगकर्ता की आईडी के बराबर क्यों होनी चाहिए? –

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