独立的ActivereCord查询ActivereCord ::关系上下文




铁轨代码上有一些红宝石

class User < ActiveRecord::Base
  def self.all_users_count
    User.all
  end
end

User.all_users_count
返回,例如 100

User.limit(5).all_users_count
现在,它返回 5 由于ActivereCord ::关系上下文,尽管我有 User.all的wroute名称,而是简单的all
(.TO_SQL显示查询始终包含limitwhere id或其他情况下其他情况)

那么,如何在模型方法中进行独立于上下文的AR查询?喜欢User.all和其他人?

谢谢!

ps。也许我的代码有错误或类似的问题,实际上User.all在任何方法和上下文中始终必须返回此模型表的正确行计数

这很奇怪且出乎意料(不幸的是,我无法确认这一点,因为我的计算机崩溃了,没有手头的铁轨项目)。

我期望

User.all 

创建一个新的范围(或您称之为 - 上下文)

尝试使用

来解决此问题
User.unscoped.all

编辑:

我在项目和干净的轨道上尝试了一下,结果是一致的。

思考了一下 - 这甚至不是问题 - 我认为您的方法可能是错误的。

在哪种情况下,您会链User.limit(2).all_users_count?我想不到。因为要么需要所有用户,因此您致电User.all_usert_count(或仅User.count

...或您需要其他东西,然后打电话给User.limit(2).where(...)-在该链中调用all_users_count是没有意义的,是吗?

,当您想到它时,这是有道理的。想象一下您有一些不同的方法,例如count_retired,您会从这种呼叫中期待什么:

User.limit(2).count_retired

退休用户的数量不超过2个,还是系统中所有退休用户的数量?我希望前者。

所以我认为这里有两种可能性之一:

  • 您要么实现了错误,应该以不同的方式进行操作(如上所述,在"编辑"部分中所述)
  • 否则您有一些更复杂的问题,但是您将示例归结为不再有意义的地步(如果您愿意的话,请跟进另一个问题链接如果您这样做,因为听起来很有趣)

最新更新