Rails:多态关联,查找评论

Rails: polymorphic associations, find commented on

我已经使用 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

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)

您可以通过

引用评论对象
comment.commentable

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

comment.commentable.name

您需要在您的控制器中预加载这些以避免 N+1。

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