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