0


我的 CommandsController 中有以下两种方法

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 不是我的类中所有方法都可见的实例变量吗?


PS要调用deleteuser方法我必须通过userslist方法,所以@command肯定不是零。

4

2 回答 2

3

@command调用方法时未设置您的实例变量deleteuser,因此它的计算结果为nil.

出现此错误的原因可能是您误解了 Rails 控制器的工作原理。Rails 为您的命令控制器创建新实例,每个请求都与此控制器相关,因此即使您@command在之前的操作中设置了实例变量,新请求也会nil再次出现。

我建议学习一些 Rails/Ruby 基础知识和约定(包括命名约定)。

于 2013-09-24T10:03:05.813 回答
0

您可以@command在控制器类的声明之后创建另一个私有方法来声明并在 before_filter 中调用它

于 2013-09-24T10:10:28.687 回答