2013-09-24 129 views
0


我在我的CommandsController以下兩種方法實例變量的Rails

class CommandsController < ApplicationController 
. 
. 
. 

def userslist 
    @command = Command.find_by(id: params[:id]) 
    @users_list = @command.users.paginate(page: params[:page], per_page: 10) 
end 

def deleteuser 
    user = User.find_by(id: params[:id]) 
    user.commands.destroy(@command) 
    flash[:success] = "Utente eliminato dalla lista con successo" 
    redirect_to list_path(@command) 
end 
. 
. 
. 

end 

當我執行deleteuser方法我收到以下錯誤:
Command(#31369720) expected, got NilClass(#19349600) 有關行user.commands.destroy(@command) 這意味着@command是nil ,但爲什麼這樣呢? @command是否是我的類中的所有方法都可見的實例變量?


P.S.要調用deleteuser方法,我必須通過userslist方法,所以@命令當然不是零。

+0

@command不能提供給deleteuser方法的聲明之後,調用它的before_filter。您需要再次聲明 – Debadatt

+0

但爲什麼不能@命令可用?它是一個實例變量,不是嗎? – zer0uno

回答

3

當您調用deleteuser方法時,您的@command實例變量未設置,因此它的計算結果爲nil

你有這個錯誤的原因是你可能誤解了Rails控制器的工作原理。 Rails會在每次請求關於此控制器的情況下創建新的命令控制器實例,因此即使您在之前的操作中設置了@command實例變量,但新請求也會再次爲nil。我建議學習一些Rails/Ruby基礎知識和約定(包括命名約定)。

+0

但它是由用戶列表方法以前設置 – zer0uno

+0

@antox我編輯我的答案更加精確。 –

0

你可以再拍私有方法聲明@command和控制器類