可以对象有两个父母在铁路?

时间:2016-02-08 22:08:51

标签: ruby-on-rails

您好我有一个评论对象,我使用多态关联,因此它可以属于许多其他对象。但我也希望它们属于用户。

现在我可以,调用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

2 个答案:

答案 0 :(得分:1)

为什么不

class Comment < ApplicationRecord
  belongs_to :user
end

答案 1 :(得分:0)

首先,在我看来comment_owner并不是你在这里设计的好名字。评论所有者会建议所有权关系(而不是某人或某人)。我倾向于将其称为commentable,因为这些对象正在被评论。

如果这种关系是多态的,那么你应该commentable_typecommentable_id(或comment_owner_typecomment_owner_id如果你真的更喜欢原文){{{ 1}}期望有这两个字段(命名为: relation_name polymorphic => true relation_name _type)。

如果你有一个评论对象,你可以通过调用_id(或comment.commentable来评论用户评论,以防你决定保留你的命名。)

[编辑] 正如你所说,你想拥有两个父母。如果我说得对,你只想拥有两个关系 - 这意味着如果你只修改你的代码:

comment.comment_owner

您将拥有多态关系以及所有权。