![](/img/trans.png)
[英]ActiveRecord::StatementInvalid: PG::UndefinedColumn: ERROR
[英]ActiveRecord::StatementInvalid PG::UndefinedColumn: ERROR
我使用 rails_admin 作為管理面板。 只需更改圖像模型中的關聯
由此
class Image < ApplicationRecord
belongs_to :user
belongs_to :product
end
對此
class Image < ApplicationRecord
has_one :user
has_one :product
end
和用戶模型是
class User < ApplicationRecord
has_many :images,dependent: :destroy
end
當我嘗試從管理面板編輯用戶時出現此錯誤。從其他方面來看,它工作正常。
ActiveRecord::StatementInvalid at /user/72/edit
PG::UndefinedColumn: ERROR: column users.image_id does not exist
LINE 1: SELECT "users".* FROM "users" WHERE "users"."image_id" = $1...
^
: SELECT "users".* FROM "users" WHERE "users"."image_id" = $1 LIMIT $2
Rails有很棒的文檔。 此處找到的has_one
文檔指出“僅當其他類包含外鍵時才應使用此方法”,因此它在user
記錄中image_id
的外鍵。 你可以通過遷移來創建它; 有關外鍵和遷移的更多信息,請參閱此堆棧溢出帖子 。
但在你走那么遠之前,請考慮:
belongs_to :user
的圖像關系更改為has_one :user
? 為了簡化SQL關聯以及Rails如何映射到它們,如果用戶has_many :images
那么圖像必須belong_to
用戶; 它們是關系的對立面,但有一個例外是has_and_belongs_to_many
關系。 如果A屬於B,則B有一個(或多個)A。我強烈建議您將圖像保持為belongs_to
關系,而User和Product可以有have_many
圖像。 有趣地解釋為什么這是有道理的:用戶可能有他們的臉,他們的房子等的個人資料照片( has_many :images
)。 產品(鞋子)可能具有相同鞋子的多張圖片( has_many :images
),但鞋子的特定圖片不太可能映射到用戶和產品。 檢查大小寫
我來到這里是因為我在列名中使用了錯誤的大寫。
該列是advertiserName
,我正在做
Listing.where(AdvertiserName: "Lowes")
Traceback (most recent call last):
ActiveRecord::StatementInvalid (PG::UndefinedColumn: ERROR: column listings.AdvertiserName does not exist)
LINE 1: SELECT "listings".* FROM "listings" WHERE "listings"."Advert...
將查詢更改為Listing.where(advertiserName: "Lowes")
立即修復了它。
檢查報價
還要注意 PostgreSQL 在使用雙引號時是不寬容的
檢查列名中的大小寫
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.