我正在使用 Ruby on Rails 3.2.2 并且正在试验 Squeel gem。我想知道(以某种方式,通过使用 Squeel gem 与否)是否可以在子句中scope
“直接”“添加”与方法相关的 SQLwhere
子句。也就是说,我有:
class Article < ActiveRecord::Base
# Note: This is a scope method.
def self.created_by(user)
where(:user_id => user.id)
end
# I would like to use a scope method like the following.
#
# Note: Code in the following method doesn't work, but it should help
# understanding what I mean.
def self.scope_method_name(user)
where{ created_by(user) | ... & ... }
end
end
因此,当我运行时,Article.scope_method_name(@current_user).to_sql
它应该返回如下内容:
SELECT articles.* FROM articles WHERE articles.user_id = 1 OR ... AND ...
我尝试过 sifters,但那些(至少对我而言)是专门用于其他Squeel 语句的。也就是说,如果我声明一个 sifter,那么我不能使用它来限定ActiveRecord
s,因为该 sifter 返回一个Squeel::Nodes::Predicate
对象而不是一个ActiveRecord::Relation
.