在rails代码上有一些ruby
class User < ActiveRecord::Base
def self.all_users_count
User.all
end
end
User.all_users_count
例如,返回 100
User.limit(5).all_users_count
现在,由于ActiveRecord :: Relation上下文,它返回 5 ,尽管我的类名为User.all
,而不是简单的all
(.to_sql显示该查询始终包含limit
或where id
或其他情况下的其他内容)
那么,我如何在模型方法中进行与上下文无关的AR查询?像User.all
和其他人一样?
谢谢!
聚苯乙烯。或许我的代码有错误或类似的东西,事实上User.all
在任何方法和上下文中总是必须返回此模型表的正确行数
答案 0 :(得分:1)
这非常奇怪和出乎意料(遗憾的是我无法确认,因为我的计算机崩溃了,手头没有铁轨项目)。
我希望
User.all
创建新范围(或称为上下文)
尝试使用
解决此问题User.unscoped.all
编辑:
我在我的项目和干净的rails repo上尝试过,结果是一致的。
思考了一下 - 这可能不是一个问题 - 我认为你的方法可能有问题。
你会在什么情况下链接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的退休用户数,或系统中所有已退休用户的数量?我期待前者。
所以我认为这里有两种可能性之一: