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
当我尝试从管理员 panel.From 编辑用户时出现此错误,但它工作正常。
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" = ...
^
: SELECT "users".* FROM "users" WHERE "users"."image_id" = LIMIT
Rails 有很棒的文档。 has_one
found here states that "This method should only be used if the other class contains the foreign key" so it is looking for the foreign key of image_id
on the user
record. You would create this through a migration; please see this stack overflow post 的文档以获取有关外键和迁移的更多信息。
但在你走那么远之前,请考虑:
- 为什么要将图像关系从
belongs_to :user
更改为 has_one :user
第一名?要归结 SQL 关联以及 Rails 如何映射到它们,如果用户 has_many :images
那么图像必须
belong_to
用户;他们是关系的对立面,有一个
异常是 has_and_belongs_to_many
关系。如果 A 属于 B,则 B 有一个(或多个)A。我强烈建议您保持图像具有 belongs_to
关系,而用户和产品可以 have_many
图像。有趣地解释为什么这是有道理的:用户可能有他们的脸、他们的房子等的个人资料照片 (has_many :images
)。一件产品(鞋子)可能有同一只鞋子的多张图片 (has_many :images
),但一张鞋子的特定图片不太可能同时映射到用户和产品。
- 我强烈建议您使用像 attachinary or paperclip 这样的 gem 来管理图像和附件。如果您正在处理上传的文件附件,像这样的库将在调整大小、图像压缩等方面为您省去麻烦。我相信您尝试更改关系的方向是由这些问题中的一些问题告知的gems会为你解决。
检查大小写
我来到这里是因为我在列名称中使用了错误的大写字母。
专栏是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")
立即修复。
查看报价
Note also PostgreSQL 在
中使用双引号时不容忍
检查列名的大小写
查看更多信息 here
我正在使用 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
当我尝试从管理员 panel.From 编辑用户时出现此错误,但它工作正常。
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" = ...
^
: SELECT "users".* FROM "users" WHERE "users"."image_id" = LIMIT
Rails 有很棒的文档。 has_one
found here states that "This method should only be used if the other class contains the foreign key" so it is looking for the foreign key of image_id
on the user
record. You would create this through a migration; please see this stack overflow post 的文档以获取有关外键和迁移的更多信息。
但在你走那么远之前,请考虑:
- 为什么要将图像关系从
belongs_to :user
更改为has_one :user
第一名?要归结 SQL 关联以及 Rails 如何映射到它们,如果用户has_many :images
那么图像必须belong_to
用户;他们是关系的对立面,有一个 异常是has_and_belongs_to_many
关系。如果 A 属于 B,则 B 有一个(或多个)A。我强烈建议您保持图像具有belongs_to
关系,而用户和产品可以have_many
图像。有趣地解释为什么这是有道理的:用户可能有他们的脸、他们的房子等的个人资料照片 (has_many :images
)。一件产品(鞋子)可能有同一只鞋子的多张图片 (has_many :images
),但一张鞋子的特定图片不太可能同时映射到用户和产品。 - 我强烈建议您使用像 attachinary or paperclip 这样的 gem 来管理图像和附件。如果您正在处理上传的文件附件,像这样的库将在调整大小、图像压缩等方面为您省去麻烦。我相信您尝试更改关系的方向是由这些问题中的一些问题告知的gems会为你解决。
检查大小写
我来到这里是因为我在列名称中使用了错误的大写字母。
专栏是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")
立即修复。
查看报价
Note also PostgreSQL 在
中使用双引号时不容忍检查列名的大小写
查看更多信息 here