簡體   English   中英

ActiveRecord::StatementInvalid PG::UndefinedColumn: 錯誤

[英]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 ),但鞋子的特定圖片不太可能映射到用戶和產品。
  • 我會強烈建議您使用管理像寶石圖片和附件attachinary回形針 如果您正在處理上傳的文件附件,那么這樣的圖書館可以幫助您解決調整大小,圖像壓縮等方面的麻煩。我相信您嘗試改變關系的方向是通過一些問題來解決的。寶石會為你解決。

檢查大小寫

我來到這里是因為我在列名中使用了錯誤的大寫。

該列是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.

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