rails通过检查关联是否被批准来获取记录列表

时间:2015-11-29 19:26:11

标签: ruby-on-rails scope

我有一个组织模型和一个organization_profile模型。 organization_profile模型具有已批准的列。我希望能够通过调用类似于:Organization.approved的内容找到所有已批准的用户。我发现处理这个的最好方法可能是通过范围。但是我似乎无法让它发挥作用。这就是我想要的

scope :approved, -> {joins(:organization_profile).where('organization_profile.approved = ?', true) }

然后,Organization.approved给了我各种错误:

Organization Load (8.0ms)  SELECT "organizations".* FROM "organizations" INNER JOIN "organization_profiles" ON "organization_profiles"."user_id" = "organizations"."id" WHERE (organization_profile.approved = 't')
PG::UndefinedTable: ERROR:  missing FROM-clause entry for table "organization_profile"
LINE 1: ...profiles"."user_id" = "organizations"."id" WHERE (organizati...
                                                         ^
: SELECT "organizations".* FROM "organizations" INNER JOIN "organization_profiles" ON "organization_profiles"."user_id" = "organizations"."id" WHERE (organization_profile.approved = 't')

有谁能告诉我正确的代码?

2 个答案:

答案 0 :(得分:1)

您的查询使用的是organization_profile(单数),但您的表名是organization_profiles(复数)。

稍微好一点的方法(也避免使用字符串)是将where子句转换为Arel谓词(可能不是正确的单词):

scope :approved, -> { joins(:organization_profile).where(OrganizationProfile.arel_table['approved'].eq(true)) }

答案 1 :(得分:1)

条件是SQL代码,它应该正确反映表格的名称,这些名称总是复数:

where('organization_profiles.approved = ?', true)