我正在使用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
答案 0 :(得分:1)
Rails有很棒的文档。 has_one
found here的文档声明&#34;只有在其他类包含外键时才会使用此方法&#34;所以它正在image_id
记录中查找user
的外键。你可以通过迁移来创建它;有关外键和迁移的更多信息,请参阅此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
),但鞋子的特定图片不太可能映射到用户和产品。