繁体   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