Rails:多态关联,查找评论

时间:2017-03-30 22:27:12

标签: ruby-on-rails ruby polymorphic-associations

我使用this tutorial在我的Rails应用上实现了多态注释。

所以我有:

class Place < ApplicationRecord
  has_many :comments, as: :commentable
end

class Comment < ApplicationRecord
  belongs_to :commentable, polymorphic: true
end

现在我想索引所有评论并将它们与他们评论的地方联系起来,但我不知道如何实现这一点。

comments_controller.rb我有:

class CommentsController < ApplicationController
  def index
    @comments = Comment.all
  end
end

在我的评论index.html.erb中,我可以访问:

<%= comment.commentable_type %>
<%= comment.commentable_id %>

但是如何访问评论所依据的实际属性,例如:<%= comment.place.name %>

我认为这与这个答案有关,但我不知道如何:rails joins polymorphic association

2 个答案:

答案 0 :(得分:1)

您只需

即可引用可评论对象
comment.commentable

这里唯一需要注意的是,它假定您的所有评论都有您调用的方法,例如name

comment.commentable.name

您需要在控制器中预加载这些,以避免使用N + 1.

class CommentsController < ApplicationController
  def index
    @comments = Comment.includes(:commentable).all
  end
end

答案 1 :(得分:0)

mccalljt上面的回答要好得多

相信我已经明白了:

已添加到comment.rb

belongs_to :place, foreign_key: 'commentable_id'

已添加到comments_controller.rb

@comments = Comment.where(commentable_type: "Place").joins(:place)

虽然在有更多关联时这不可重用,但我可以将其更改为:

@place_comments = Comment.where(commentable_type: "Place").joins(:place)
@other_comments = Comment.where(commentable_type: "Other").joins(:other)