gpt4 book ai didi

ruby-on-rails - ActiveRecord::StatementInvalid PG::UndefinedColumn: 错误

转载 作者:行者123 更新时间:2023-12-04 15:40:47 27 4
gpt4 key购买 nike

我使用 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 的文档found here声明“仅当其他类包含外键时才应使用此方法”,因此它正在寻找 image_id 的外键。在 user记录。您将通过迁移来创建它;请看这个 stack overflow post有关外键和迁移的更多信息。

但在你走那么远之前,请考虑:

  • 为什么要从 belongs_to :user 更改 Image 关系至 has_one :user在里面
    第一名?如果用户 has_many :images,则归结 SQL 关联以及 Rails 如何映射到它们。那么图像必然belong_to用户;他们是关系的对立面,有一个
    异常(exception)是 has_and_belongs_to_many关系。如果 A 属于 B,则 B 有一个(或多个)A。我强烈建议您保留图像为 belongs_to关系,而用户和产品可以 have_many图片。顺便解释一下为什么这是有道理的:用户可能有他们的脸、他们的房子等的个人资料照片 (has_many :images)。一个产品(鞋子)可能有同一个鞋子的多张图片 (has_many :images),但鞋子的特定图片不太可能同时映射到用户和产品。
  • 我强烈建议您使用像 attachinary 这样的 gem 来管理图像和附件。或 paperclip .如果您正在处理上传的文件附件,像这样的库将在调整大小、图像压缩等方面为您省去麻烦。我相信您尝试更改关系的方向是由这些问题告知的 gem 会为你解决。
  • 关于ruby-on-rails - ActiveRecord::StatementInvalid PG::UndefinedColumn: 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41980279/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com