如何通过Rails控制台中的对象访问ActiveRecord范围?

时间:2018-07-25 10:53:16

标签: ruby-on-rails rails-activerecord

关于ActiveRecord范围,我现在陷入困境。 AFAIU,模型内部的作用域被转换为类方法,因此它们只能由类而不是对象来调用。 例如,如果我有一个用户属于 Company 关联,并且 Company 具有如下范围:

scope :blacklisted_companies, -> { ...some code here...} 我只能像blacklisted_companies这样叫Company.blacklisted_companies,对吧?

但是,我可以通过Rails控制台通过关联的对象访问它,如下所示: user.company.blacklisted_companies

有人可以解释这怎么可能吗?

编辑:根据建议进行澄清,我想问一下为什么(user.company.blacklisted_companies)在控制台而不是在实际代码中工作

1 个答案:

答案 0 :(得分:0)

通过rails中的关联进行访问将创建ActiveRecord关系,它是作用域的有效目标。

例如:Rails的PoV中的user.company等同于Company.where(user: user),特别是因为它都是惰性计算的。

这等效于类方法,因此您可以在其上调用作用域。

编辑:OP更改了问题,请忽略此答案。