我正在为ActiveRecord模型编写模块。总之它是可以调用一系列的方法where
,join
和order
语句。在编写本文时,这些语句是未知的,因此无法使用范围。到目前为止,它运行良好,但是我想改进一点。
这是我的方法:
def filter
rel = respond_to?(:filter_scope) ? filter_scope : where(1)
# Do other stuffs with `rel`
# ...
rel
end
它首先调用(filter_scope
如果已定义),或者ActiveRecord::Relation
从目标模型获取一个。为此,我使用where(1)
强制模型返回关系对象的方法。这种运作良好,每当我打电话filter
直接在模型上(User.filter
)或关系(User.order(:name).filter
,User.my_scope.filter.order(:age)
等...)
但是使用时会where(1)
有点脏。在Rails 3中,我会all
改用它,但是在Rails 4中,它会贬值。关于如何改善这一点的任何想法吗?
提前致谢
注意:我不能用代替where(1)
,self
因为有可能self
从中返回filter
并User.filter
成为一个类,因此不能用作查询对象。
在Rails 3中,我将全部使用它,但是在Rails 4中它已贬值。
我不认为all
它已贬值,它曾经返回一个Array
(rails 3),现在返回了一个,ActiveRecord::Relation
因此您应该可以将其用于链接查询。
参见http://api.rubyonrails.org/classes/ActiveRecord/Scoping/Named/ClassMethods.html#method-i-all
返回一个ActiveRecord :: Relation作用域对象。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句