我的评论模型非常简单并且可以多态工作,但是我现在添加了隐藏给定记录的作者在这些多态关联中的评论的功能。
class Comment < ActiveRecord::Base
attr_accessible :content, :show
belongs_to :commentable, :polymorphic => true
belongs_to :user
end
因此,请求、问题、帖子、提交等......都有评论并且正在毫无问题地访问评论模板,但我希望允许这些模型中内容的作者显示或隐藏评论(而不是标记,对于例如)当应用程序将他们标识为所评论内容的作者时。
class Request < ActiveRecord::Base
has_many :comments, :as => :commentable, :dependent => :destroy
end
所以,当只有一个模型时,我可以通过调用作者:@request.user 来完成所有工作,但我想知道如何使用元编程调用作者,所以评论视图(在帮助下)可以确定当前是什么模型使用评论视图。
我对元编程进行了一些研究,但还没有找到答案。
这是调用作者(@request.user)的代码:
<% if @comments %>
<h1 class="mtop20">Comments</h1>
<% for comment in @comments %>
<% if signed_in? %>
<% if comment.show == true %>
<div class="well comment mtop10">
<% if current_user == @request.user or current_user.has_role? :admin %>
<%= simple_form_for [@commentable, comment] do |f| %>
<div class ="">
<%= f.input :show, :as => :hidden, :input_html => { :value => false } %>
<%= f.submit "Hide Comment", :class => 'btn btn-mini pull-right' %>
</div>
<% end %>
<% end %>
<span>
<%= image_tag comment.user.image.source(:header) %>
<%= link_to comment.user.name, comment.user %></span>
Posted <%= time_ago_in_words(comment.created_at) %> ago
</span>
<p class="mleft20 mtop10"><%= comment.content %></p>
<% if signed_in? %>
<% if current_user.id == comment.user_id or current_user.has_role? :admin %>
<%= link_to 'Edit', polymorphic_path([ comment.commentable, comment], :action => :edit),
:class => 'btn btn-mini mtop5 mleft10' %>
<%= link_to 'Delete', [comment.commentable, comment],
:confirm => 'Are you sure?',
method: :delete,
:class => 'btn btn-mini mtop5' %>
<% end %>
<% end %>
</div>
<% end %>
<% if comment.show == false %>
<p>A comment by <%= comment.user.name %> has been hidden by <%= @request.user.name %></p>
<% if current_user == @request.user or current_user.has_role? :admin %>
<%= simple_form_for [@commentable, comment] do |f| %>
<div class ="">
<%= f.input :show, :as => :hidden, :input_html => { :value => true } %>
<%= f.submit "Show Comment", :class => 'btn btn-mini btn-success' %>
</div>
<% end %>
<% end %>
<% end %>
<% end %>
<% end %>
<% end %>
<%= render "comments/form" %>