我正在使用Opinio gem来处理对我的一个模型的评论。我也在使用 cancan 进行授权。
我可以添加评论,没有问题,但我不知道如何删除评论。我只是得到一个文本字符串说“未经授权”。而已。
这是我的渲染代码:
<!-- _comment.html.erb (generated by Opinio) -->
<% reply = defined?(reply) ? reply : false %>
<dt id="comment_<%= comment.id %>"><%= link_to comment.owner.name, comment.owner %></dt>
<dd class="well">
<%= simple_format(comment.body) %>
<% if can? :delete, comment%>
<%= link_to t('opinio.actions.delete'), comment_path(comment), :method => :delete%>
<% end %>
<% if Opinio.accept_replies && !reply %>
<span><%= link_to t('opinio.actions.reply'), reply_comment_path(comment), :remote => true %></span>
<ul id="comment_<%= comment.id %>_replies" class="replies">
<%= render :partial => "opinio/comments/comment", :collection => comment.comments, :locals => {:reply => true} %>
</ul>
<% end %>
</dd>
奇怪的是我最初的if can? :delete, comment
作品,所以我得到了删除链接。我在这里删除了一个:remote => true
,这样我就可以看到实际发生了什么。
这是我的能力.rb:
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new # guest user (not logged in)
if user.has_role? :admin
can :manage, :all
can :access, :rails_admin # grant access to rails_admin
can :dashboard
else
can :read, :all
can :delete, Comment, :owner_id => user.id
end
end
end
我查看了 opinio 的源代码,发现我认为失败的测试:
#In opinio gem: comments_controller.rb
if can_destroy_opinio?(@comment)
任何帮助都会很棒。