关于ActiveRecord范围,我现在陷入困境。 AFAIU,模型内部的作用域被转换为类方法,因此它们只能由类而不是对象来调用。 例如,如果我有一个用户属于 Company 关联,并且 Company 具有如下范围:
scope :blacklisted_companies, -> { ...some code here...}
我只能像blacklisted_companies
这样叫Company.blacklisted_companies
,对吧?
但是,我可以通过Rails控制台通过关联的对象访问它,如下所示:
user.company.blacklisted_companies
。
有人可以解释这怎么可能吗?
编辑:根据建议进行澄清,我想问一下为什么(user.company.blacklisted_companies
)在控制台而不是在实际代码中工作
答案 0 :(得分:0)
通过rails中的关联进行访问将创建ActiveRecord关系,它是作用域的有效目标。
例如:Rails的PoV中的user.company
等同于Company.where(user: user)
,特别是因为它都是惰性计算的。
这等效于类方法,因此您可以在其上调用作用域。
编辑:OP更改了问题,请忽略此答案。