我正在使用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
我查看了source code的意见,我发现我认为测试失败的测试:
#In opinio gem: comments_controller.rb
if can_destroy_opinio?(@comment)
任何帮助都会很棒。
答案 0 :(得分:0)
您是否可以继承所覆盖的comments_controller
并覆盖can_destroy_opinio
?如果没有,您是否可以重新打开意见comments_controller
并重新定义can_destroy_opinio
(通常称为猴子补丁)?