2012-09-18 90 views
5

Arel 3.0.2提供了兩個類來指定連接類型:Arel::Nodes::InnerJoinArel::Nodes::OuterJoin,並使用InnerJoin作爲默認值。如何與Arel離開?

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 

如果要生成左連接,如何連接兩個表?

+0

也許這可以幫助:http://ruby.ryanbigg.com/post/1468788928/left-outer-join-with-arel –

回答

7

使用

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

因爲LEFT JOIN = LEFT OUTER JOIN。外面是一個選項。 請參閱here

0

下面是一個完整的例子,用於任何人想看到的導軌模型。

我花了幾個小時搞清楚,所以我想我會與世界

這裏假設你有一個模型叫RssFeed和另一個名爲RssFeedUser這是一個的has_many聯接模型共享:通過對模型稱爲User

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.*'))