簡體   English   中英

PG :: Error:錯誤:列引用“狀態”在active_admin中不明確

[英]PG::Error: ERROR: column reference “status” is ambiguous in active_admin

使用rails 3.2active_admin並看到PG::Error: ERROR: column reference "status" is ambiguousRents.rbactive_admin使用自定義過濾器時, PG::Error: ERROR: column reference "status" is ambiguous

filter :travel_car_brand, as: :string
filter :travel_car_model, as: :string

錯誤指向:

: SELECT COUNT(DISTINCT "rents"."id") FROM "rents" LEFT OUTER JOIN "travels" ON "travels"."id" = "rents"."travel_id" LEFT OUTER JOIN "cars" ON "cars"."travel_id" = "travels"."id" WHERE ("cars"."brand" ILIKE '%mazda%') AND ("startDate" > '2014-08-04 10:15:14 +0200' and status = 'paid'):

有趣的是,上述內容的status = 'paid'因為我不確定為什么將其用作過濾器。

楷模

Rent.rb
belongs_to :travel

Travel.rb
has_one :car

租金表和旅行表都具有status屬性。

我已經看過盧卡斯的回答,但是如果這是Rails應用程序,則SQL應該由應用程序生成,而不是硬編碼。 因此,直接更改SQL不是解決方案。

相反,我建議您找到添加“付費”過濾器的代碼,然后對其進行修改以聲明相關的模型名稱。

您可能在某個范圍內:

scope :paid, where(status: 'paid')

將其更改為(例如):

scope :paid, where("model.status = 'paid'")

您需要選擇要選擇屬性的表,或者同時使用兩者

例如

SELECT
COUNT(DISTINCT "rents"."id")
FROM "rents"
LEFT OUTER JOIN "travels" ON "travels"."id" = "rents"."travel_id"
LEFT OUTER JOIN "cars" ON "cars"."travel_id" = "travels"."id"
WHERE ("cars"."brand" ILIKE '%mazda%')
AND ("startDate" > '2014-08-04 10:15:14 +0200') 
AND rents.status = 'paid'

或者如果您同時需要:

SELECT
COUNT(DISTINCT "rents"."id")
FROM "rents"
LEFT OUTER JOIN "travels" ON "travels"."id" = "rents"."travel_id"
LEFT OUTER JOIN "cars" ON "cars"."travel_id" = "travels"."id"
WHERE ("cars"."brand" ILIKE '%mazda%')
AND ("startDate" > '2014-08-04 10:15:14 +0200')
AND rents.status = 'paid'
AND travels.status = 'paid'

您的“狀態”列不明確。 因為SQL無法理解您想要哪個表的列。 SQL無法理解的Rent.status或Travels.status。

暫無
暫無

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

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