2013-04-04 48 views
0

我正在使用devise連接到我的第一個Ruby on Rails應用程序。我有一些工作,但我碰到了一個問題,我的新手大腦似乎無法理解。Ruby on Rails - CanCan用戶在銷燬行動期間爲零

我想刪除一個項目模型。該康康舞ability.initialize電話不能正常工作,因爲用戶是零,即使我登錄和其他呼叫成功授權

在我的節目鑑於過去了,我有此鏈接:

<%= 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 

我的康康舞初始化做到這一點:

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

當我點擊上面的刪除鏈接,這被puts'ed控制檯(注意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方法=刪除,我失蹤了?我怎樣才能阻止愚蠢,它傷害?

前面的「秀」行動取得了這一預期看跌期權(結論的東西應該足夠有線了):

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

謝謝!

回答

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 %>