2012-09-18 14 views
5

Arel 3.0.2, birleştirme türünü belirtmek için iki sınıf sağlar: Arel::Nodes::InnerJoin ve Arel::Nodes::OuterJoin ve InnerJoin varsayılan olarak kullanır.Arel'a nasıl katılınır?

foo = Arel::Table.new('foo') 
bar = Arel::Table.new('bar') 

foo.join(bar, Arel::Nodes::InnerJoin) # inner 
foo.join(bar, Arel::Nodes::OuterJoin) # outer 

foo.join(bar, ???) # left 

Bir sol birleştirmeyi üretmek isterseniz iki tabloya nasıl katılırsınız? Kullanım

foo.join(bar, Arel::Nodes::OuterJoin) # outer 

SOL = SOL DIŞ JOIN Çünkü

+0

User seslendi: http://ruby.ryanbigg.com/post/1468788928/left-outer-join-with-arel –

cevap

0

Burada görmek isteyen herkes için ray modelleri içeren tam bir örnek.

yüzden ben dünyaya Bu şekilde tek bir modeli RssFeed ve has_many için katılmak modeldir başka denilen RssFeedUser denilen sahip olduğu varsayılır

ile paylaşmak istedim anlamaya bana birkaç saat sürdü: through a için Model Belki de bu yardımcı olabilir

RssFeed.find_by_sql(RssFeed.arel_table.join(RssFeedUser.arel_table,Arel::Nodes::OuterJoin).on(RssFeed.arel_table[:id].eq(RssFeedUser.arel_table[:rss_feed_id])).where(RssFeedUser.arel_table[:user_id].eq(nil)).project('rss_feeds.*'))