假设我有一个Rails模型:
那看起来很合理。不过,最初的回答是:
"Project::ActiveRecord_Relation"是什么?具体而言:
(如果有人能想出更好的标题,我可以接受标题编辑。)
class Project < ActiveRecord::Base
在Rails控制台中:> Project.all
=> #<ActiveRecord::Relation []>
那看起来很合理。不过,最初的回答是:
> Project.all.class
=> Project::ActiveRecord_Relation
"Project::ActiveRecord_Relation"是什么?具体而言:
- 它是如何被“添加”(命名空间)到我的模型类中的?
- 它如何正确响应
is_a?
?Project.all.is_a?(ActiveRecord::Relation)
返回true
(预期结果),但是Project::ActiveRecord_Relation
实际上是ActiveRecord::Relation
的一个实例,还是其他东西? - 为什么要这样做?为什么不直接返回
ActiveRecord::Relation
,而是返回Project::ActiveRecord_Relation
?
(如果有人能想出更好的标题,我可以接受标题编辑。)
Project
的类方法都会混入Project::ActiveRecord_Relation
中,这就是为什么你可以使用Project.where(...).some_scope
这样的语法,并且也是为什么你可以将作用域实现为显式的类方法。 - undefined