Model.scoped
现在不建议使用Rails 4 。
DEPRECATION WARNING: Model.scoped is deprecated. Please use Model.all instead.
但是,有一个区别Model.scoped
和Model.all
,那就是scoped.scoped
返回一个范围,而all.all
运行查询。
在Rails 3上:
> Model.scoped.scoped.is_a?(ActiveRecord::Relation)
=> true
在Rails 4上:
> Model.all.all.is_a?(ActiveRecord::Relation)
DEPRECATION WARNING: Relation#all is deprecated. If you want to eager-load a relation, you can call #load (e.g. `Post.where(published: true).load`). If you want to get an array of records from a relation, you can call #to_a (e.g. `Post.where(published: true).to_a`).
=> false
库/关注中存在用例,scoped
当有条件做某事或什么都不做时会返回,例如:
module AmongConcern
extend ActiveSupport::Concern
module ClassMethods
def among(ids)
return scoped if ids.blank?
where(id: ids)
end
end
end
如果将其更改scoped
为all
,您将面临随机问题,具体取决于among
范围链中使用的位置。例如,Model.where(some: value).among(ids)
将运行查询而不返回范围。
我想要的是ActiveRecord::Relation
仅返回范围的幂等方法。
我应该在这里做什么?
all
运行查询”的东西不仅仅是控制台的人工产物吗?消息人士认为它应该可以正常工作。