我有一个Author
模型,其中包含habtm:feeds。使用Rails 3需要设置一个范围,以查找没有关联Feed的所有作者。
class Author < ActiveRecord::Base
has_and_belongs_to_many :feeds
scope :without_feed, joins(:feeds).where("authors_feeds.feed_id is null")
end
......似乎不起作用。感觉就像一件简单的事情。我在这里缺少什么?
答案 0 :(得分:23)
据我所知,ActiveRecord / Arel没有定义外连接的方法。因此,您必须编写比正常情况更多的SQL。这样的事情可以解决问题:
scope :without_feed, joins('left outer join authors_feeds on authors.id=authors_feeds.author_id').where('authors_feeds.feed_id is null')
我当然在猜你的桌名和外键。但这应该会给你提供图片。
答案 1 :(得分:1)
在 Rails >= 5 中,你可以这样做:
scope :without_feed, -> {
left_outer_joins(:feeds)
.where(authors_feeds: { author_id: nil })
}
scope :with_feed, -> {
left_outer_joins(:feeds)
.where.not(authors_feeds: { author_id: nil })
}