我正在使用连接到我的第一个 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...
谢谢!