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如果想要生成左连接,如何连接两个表?
发布于 2012-09-20 21:53:58
您可以使用
foo.join(bar, Arel::Nodes::OuterJoin) # outer因为LEFT JOIN = LEFT OUTER JOIN。Outer是一个选项。请参阅here
发布于 2014-04-23 14:16:22
这里有一个完整的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.*')
)https://stackoverflow.com/questions/12475058
复制相似问题