Ruby on rails 带交叉连接的高级Rails 3范围
我想要一个示波器,它能给我一个他们有章节的书的列表。我找到了 它帮助我选择有章节的书。但是如果我想选择那些没有章节的,比如:Ruby on rails 带交叉连接的高级Rails 3范围,ruby-on-rails,join,scope,Ruby On Rails,Join,Scope,我想要一个示波器,它能给我一个他们有章节的书的列表。我找到了 它帮助我选择有章节的书。但是如果我想选择那些没有章节的,比如: class Book scope :long, joins(:chapters). select('books.id, count(chapters.id) as n_chapters'). group('books.id'). having('n_chapters = 0') end 这个范围
class Book
scope :long, joins(:chapters).
select('books.id, count(chapters.id) as n_chapters').
group('books.id').
having('n_chapters = 0')
end
这个范围不返回任何内容。你能帮我一个忙吗?使用
连接
可以创建与所有已经有连接的书籍+章节的组合的关系。这是通过vieinternaljoin
SQL子句完成的。如果希望创建所有可能的组合(包括书本+无效章节),则必须进行外部联接
替换
joins(:chapters).
与
<强>但在此情况下考虑使用<代码>而不是< /COD> SQL子句。就像这里:
scope :long, lambda { where('id NOT IN (%s)' % Chapter.select(:book_id).to_sql) }
它的结构更小/更快,可读性和可维护性更强。好家伙!这两种解决方案都非常有效。我很高兴能得到这么快和有能力的帮助。祝你周末愉快;)
scope :long, lambda { where('id NOT IN (%s)' % Chapter.select(:book_id).to_sql) }