0

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

我正在尝试删除项目模型。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 method=delete 的特别之处吗?我怎样才能阻止哑巴,它很痛?

前面的“显示”动作产生了这个预期的放置(结论的东西应该充分连接):

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

谢谢!

4

1 回答 1

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 %>
于 2013-04-04T18:00:44.750 回答