2011-09-23 18 views
10

Basit bir modelRails içinde AREL'de alt sorgularda birleştirme nasıl yapılır

class User 
    has_many :logs 


class Logs 

'ım var, normalde yabancı anahtar logs.user_id aracılığıyla. Arel kullanarak aşağıdakileri yapmaya çalışıyorum ve Arel doktora göre çalışmalı.

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])) 

Bunu yaptığımda

TypeError: Cannot visit Arel::SelectManager 

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])) 
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])) 
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])) 
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])) 
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])) 

Lütfen aynı sorguyu ham sql, başka bir tür Arel sorgusu ile nasıl elde edebileceğime ilişkin cevap yazmayın. Bu sorgunun belirli sonuçlarıyla ilgilenmediğim kalıptır.

cevap

8
Sen Arel :: Düğümler :: Arel :: SelectManager ait örneğinden katıl, ve örneği kullanarak

katılır bu geçmesine almak için join_sources kullanabilirsiniz

:

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

'l_t [: id] .eq (sayım [: user_id]) 'Bu işe yarıyor mu? Demek istediğim, neden bir günlüğün kimliği kullanıcının kimliğine eşit olsun? –

İlgili konular