2013-11-15 18 views
0

我試圖從與Ruby on Rails的數據庫被刪除停止特定聯繫 我已經嘗試了一些東西,但繼承人的代碼,因爲它代表停止刪除管理員的地方名稱,如「string_name」

編輯2改User.name到@ user.name

型號

after_destroy :can_not_destroy_super_admin 

private 
def can_not_destroy_super_admin 
    if @user.name == "super admin" 
     raise "Can't delete this admin" 
    end 
end 

我認爲它是一個問題User.name,但我知道它看到這個代碼,因爲我有錯誤,提出問題與不同我在這裏試過的代碼。

我知道,這是一個相對簡單的方法來停止刪除管理員,但這是一種簡單的方法來獲得我需要做的事情。

任何建議或幫助非常感謝。

Edit.1

這裏是破壞方法

控制器

def destroy 
@user = User.find(params[:id]) 
begin 
    @user.destroy 
    flash[:notice] = "User #{@user.name} deleted" 
rescue Exception => e 
    flash[:notice] = e.message 
end 
respond_to do |format| 
    format.html { redirect_to users_url } 
    format.json { head :no_content } 
end 
end 
+0

恩,你有'after_destroy'回調。看到「之後」?已經太晚了,用戶已經離開了。 :) –

回答

2

我猜你的摧毀行動看起來是這樣的?

def destroy 
    @user = user.find params[:id] 
    @user.destroy 
end 

如果是這樣的話,你想在你的回調所要檢查的用戶@user.name,不User.name。您希望確保您調用的實際用戶實例與您正在檢查名稱的實例相同。

編輯:如評論中所確定的,回調實際上在模型上,我誤解爲在控制器中。在模型中,要引用對象名稱,只需要name,而不是User.name@user.name

+0

我嘗試在'can_not_destroy_super_admin'中更改'User.name'到'@ user.name',但是會引發錯誤 –

+0

,這是什麼錯誤? – sevenseacat

+0

未定義的方法'name'爲零:NilClass –

相關問題