您好我有一个评论对象,我使用多态关联,因此它可以属于许多其他对象。但我也希望它们属于用户。
现在我可以,调用comment.comment_owner
并获得此评论评论的对象。
对于用户,我在评论对象中有一个user_id
字段,我通过表单传递用户ID。但是当我尝试通过comment.user
获取所有者用户时,我收到了错误消息。现在我通过User.find(comment.user_id)获得用户。但这看起来很糟糕。
有没有办法传递用户ID。所以我可以通过comment.user
我的协会:
class Comment < ActiveRecord::Base
belongs_to :comment_owner, polymorphic: true
end
class User < ActiveRecord::Base
has_many :comments, as: :comment_owner
end
class Posts < ActiveRecord::Base
has_many :comments, as: :comment_owner
end
答案 0 :(得分:1)
为什么不
class Comment < ApplicationRecord
belongs_to :user
end
答案 1 :(得分:0)
首先,在我看来comment_owner
并不是你在这里设计的好名字。评论所有者会建议所有权关系(而不是某人或某人)。我倾向于将其称为commentable
,因为这些对象正在被评论。
如果这种关系是多态的,那么你应该commentable_type
和commentable_id
(或comment_owner_type
和comment_owner_id
如果你真的更喜欢原文){{{ 1}}期望有这两个字段(命名为: relation_name polymorphic => true
和 relation_name _type
)。
如果你有一个评论对象,你可以通过调用_id
(或comment.commentable
来评论用户评论,以防你决定保留你的命名。)
[编辑] 正如你所说,你想拥有两个父母。如果我说得对,你只想拥有两个关系 - 这意味着如果你只修改你的代码:
comment.comment_owner
您将拥有多态关系以及所有权。