如何离开加入Arel?

问题描述 投票:5回答:2

Arel 3.0.2提供了两个类来指定连接类型:Arel::Nodes::InnerJoinArel::Nodes::OuterJoin,并使用InnerJoin作为默认值。

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

如果要生成左连接,如何加入两个表?

ruby join arel
2个回答
8
投票

使用

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

因为LEFT JOIN = LEFT OUTER JOIN。外面是一个选择。见here


0
投票

以下是一个完整的示例,其中包含适用于任何想要查看的人的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.*')
)
© www.soinside.com 2019 - 2024. All rights reserved.