簡體   English   中英

rails通過檢查關聯是否被批准來獲取記錄列表

[英]rails get a list of records by checking if association is approved

我有一個組織模型和一個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')

誰能告訴我正確的密碼?

您的查詢使用的是organization_profile (單數),但是表名是organization_profiles (復數)。

一種更好的方法(也避免使用字符串)是將where子句轉換為Arel謂詞(可能不是正確的詞):

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

條件是SQL代碼,該代碼應正確反映始終為復數形式的表名:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM