Ruby on rails 如何使用多个作用域构造查询?

Ruby on rails 如何使用多个作用域构造查询?,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,第一:假设我有一个用户类,并且希望在用户类之外创建用户作用域。例如,我有一个Book类,我希望它为希望阅读该书的用户返回一个作用域: class Book < ActiveRecord::Base def interested_users Users.scoped.where(sql_for_they_would_like_to_read_this_book) end end 我知道如果在用户上定义范围,我可以 用户。对书籍(第1册)感兴趣。对书籍(第2册)感兴趣。 但

第一:假设我有一个用户类,并且希望在用户类之外创建用户作用域。例如,我有一个Book类,我希望它为希望阅读该书的用户返回一个作用域:

class Book < ActiveRecord::Base

  def interested_users
    Users.scoped.where(sql_for_they_would_like_to_read_this_book)
  end
end
我知道如果在用户上定义范围,我可以
用户。对书籍(第1册)感兴趣。对书籍(第2册)感兴趣。
但那不是我想要的地方。

找到了

看起来可以使用
merge

如果您有原始sql,您将无法像Apneading所说的那样利用范围良好性。您应该使用Arel:@FarleyKnight我不清楚Arel会有什么帮助(之前使用过它,只是再次查看了文档)。你有一个例子吗?
def union_scopes(scope1, scope2)
  ???
end

would_like_to_read_all_books = User.scope
books.each do |book|
  would_like_to_read_all_books = union_scopes(user_scope, book.interested_users)
end