[英]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.