Ruby on Rails - 在破坏行动期间,CanCan用户为零

时间:2013-04-04 15:31:03

标签: ruby-on-rails-3 devise cancan

我将cancan与设计连接到我的第一个Ruby on Rails应用程序。我有一些工作,但我遇到了一个问题,我的新手大脑似乎无法理解。

我正在尝试删除项目模型。 cancan ability.initialize调用无法正常工作,因为即使我已登录并且其他调用成功授权,用户也会以nil方式传递

在我的节目视图中,我有这个链接:

<%= link_to "Purge this project", @project, method: :delete, data: {confirm: "There is no way to get it back. Are you sure you want to permanently remove this project?"} %>

我认为我的控制器连接正确,其他操作已正确授权

class ProjectsController < ApplicationController
  load_and_authorize_resource
  ...
  def destroy
    puts "***********removing: " + params.inspect 
    @project.destroy
    ...
  end

我的cancan初始化就是这样:

  def initialize(user)
    user ||= User.new # guest user
    puts "********  Evaluating cancan permissions for: " + user.inspect
    ...

当我点击上面的删除链接时,这会被置于控制台(请注意user.id是如何为零,这是因为如果用户为零,我会设置访客)

********  Evaluating cancan permissions for: #<User id: nil, email: ""...
Started DELETE "/projects/16" for 127.0.0.1 at 2013-04-04 10:48:23 -0400
Processing by ProjectsController#destroy as HTML
  Parameters: {"id"=>"16"}
WARNING: Can't verify CSRF token authenticity

问题:为什么用户为零???它与CSRF令牌问题有关吗?关于http方法=删除有什么特别之处吗?我怎么能阻止愚蠢,这很疼?

前面的“show”动作产生了这个预期的看跌期权(结论性的东西应该充分连接):

********  Evaluating cancan permissions for: #<User id: 2, email: "doug...

谢谢!

1 个答案:

答案 0 :(得分:0)

自我回答警告!所以,我想删除行动需要在表格帖子中进行,以便正确处理身份和CSRF内容?!

用表单替换我的链接使事情再次发挥作用:

<%= form_for @project, :method => :delete do  %>   
  <%= submit_tag "Purge this project", confirm: "Are you sure you want to permanently remove this project?" %> 
<% end %>