Rails 4 - 如何编写范围

时间:2016-06-22 06:49:50

标签: ruby-on-rails methods scope

我试图弄清楚如何编写一个检查相关属性是否存在的范围。

我想要尝试的要点是我的用户模型中的范围:

scope :onboarded, -> { where ("user.profile_id IS NOT NULL AND user.profile.organisation_id IS NOT NULL") } 

我有另一个名为Profile的模型。协会是:

User has_one profile
Profile belongs to User.

以上范围是用我的用户模型编写的。它基于这篇文章Rails: Using service class methods in a scope query

的建议

我不确定是否应该尝试在我的个人资料模型中创建一个范围来检查是否存在ID或组织ID,然后以某种方式尝试在我的用户模型中测试该范围,或者我是否可以链接模型在我的用户范围内一起测试。

1 个答案:

答案 0 :(得分:0)

最简单的可能只是使用joins,因为这将执行内部联接,因为您实际上是在检查现有关联而不仅仅是简单属性。

考虑到您在belongs_toprofile之间也有organization关系,您可以这样做:

scope :onboarded, -> { joins(profile: :organization) }

这将返回具有配置文件的所有用户。