Я использую Ruby on Rails 3.2.2 и экспериментирую с драгоценным камнем Squeel. Я хотел бы знать, можно ли (каким-то образом, с помощью драгоценного камня Squeel или нет) «добавить» предложения SQL, связанные с методом scope
, «непосредственно» в предложении where
. То есть у меня есть:
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 ...
Я попробовал просеиватели, но они (по крайней мере, для меня) предназначены для использования исключительно< /em> в других операторах Squeel. То есть, если я укажу просеиватель, то я не могу использовать его для области видимости ActiveRecord
s, потому что этот просеиватель возвращает объект Squeel::Nodes::Predicate
вместо ActiveRecord::Relation
.