我将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...
谢谢!
答案 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 %>