7

Arel 3.0.2 提供了两个类来指定连接类型:Arel::Nodes::InnerJoinArel::Nodes::OuterJoinInnerJoin用作默认值。

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

如果要产生左连接,如何连接两个表?

4

2 回答 2

13

您可以使用

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

因为左连接 = 左外连接。外部是一种选择。看这里

于 2012-09-20T13:53:58.307 回答
2

这是任何想看的人的完整示例,其中包含 Rails 模型。

我花了几个小时才弄清楚,所以我想我会与世界分享

这假设您有一个模型被调用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.*')
)
于 2014-04-23T06:16:21.537 回答