【问题标题】:How to left join with Arel?如何离开加入 Arel?
【发布时间】:2012-09-18 10:22:58
【问题描述】:

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


【解决方案1】:

你可以使用

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

因为左连接 = 左外连接。外部是一种选择。 见here

【讨论】:

    【解决方案2】:

    这里有一个完整的 Rails 模型示例,任何人都想看。

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

    这假设您有一个名为 RssFeed 的模型和另一个名为 RssFeedUser 的模型,这是一个 has_many 的连接模型 :through 用于一个名为 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.*')
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多