我使用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
答案 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)