gpt4 book ai didi

activerecord - 在 Rails 4 中,Model.scoped 已被弃用,但 Model.all 无法替代它

转载 作者:行者123 更新时间:2023-12-03 05:18:31 25 4
gpt4 key购买 nike

从 Rails 4 开始,Model.scoped 现已弃用。


弃用警告:Model.scoped 已弃用。请改用 Model.all。

但是,Model.scopedModel.all 有一个区别,即 scoped.scoped 返回一个作用域,而 all.all 运行查询。

On Rails 3:

> Model.scoped.scoped.is_a?(ActiveRecord::Relation)
=> true

On 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

当有条件做某事或什么都不做时,库/关注点中的某些用例会返回范围,如下所示:

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 上的幂等方法,它只返回一个范围。

我应该在这里做什么?

最佳答案

看起来 where(nil)scoped 的真正替代品,它可以在 Rails 3 和 4 上运行。:(

关于activerecord - 在 Rails 4 中,Model.scoped 已被弃用,但 Model.all 无法替代它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18198963/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com