Arel 3.0.2 提供了两个类来指定连接类型:Arel::Nodes::InnerJoin
和 Arel::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
如果要生成左连接,如何连接两个表?
您可以使用
foo.join(bar, Arel::Nodes::OuterJoin) # outer
因为左联接 = 左外联接。外部是一个选项。看这里
这是一个完整的 rails 模型示例,供任何想要查看的人使用。
花了我几个小时才弄清楚,所以我想我会与世界分享
这假设您有一个名为 RssFeed
的模型和另一个称为 RssFeedUser
的模型,它是一个名为 User
的模型的 has_many :through 的连接模型
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.*')
)