Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 实例变量轨道_Ruby On Rails_Instance Variables - Fatal编程技术网

Ruby on rails 实例变量轨道

Ruby on rails 实例变量轨道,ruby-on-rails,instance-variables,Ruby On Rails,Instance Variables,我的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


我的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
class CommandsController
执行deleteuser方法时,我收到以下错误:
Command(#31369720)应为,但得到了NilClass(#19349600)
与行
user.commands.destroy(@command)
这意味着@command是nil,但为什么是这样呢?@command不是我类中所有方法都可见的实例变量吗?



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

调用

deleteuser
方法时,您的
@command
实例变量没有设置,所以它的计算结果是
nil

出现此错误的原因可能是您误解了Rails控制器的工作方式。Rails使用与此控制器相关的每个请求创建commands控制器的新实例,因此,即使您在上一个操作中设置了
@command
实例变量,使用新请求,它仍然是
nil


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

调用
deleteuser
方法时,未设置
@命令
实例变量,因此其计算结果为
nil

出现此错误的原因可能是您误解了Rails控制器的工作方式。Rails使用与此控制器相关的每个请求创建commands控制器的新实例,因此,即使您在上一个操作中设置了
@command
实例变量,使用新请求,它仍然是
nil


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

您可以创建另一个私有方法来声明
@command
,并在声明控制器类后在过滤器前调用它

您可以创建另一个私有方法来声明
@command
,并在控制器类声明后在过滤器前调用它

@command不能用于删除用户方法。您需要再次声明,但为什么@command不可用?这是一个实例变量,不是吗?@命令不能用于deleteuser方法。您需要再次声明,但为什么@command不可用?它是一个实例变量,不是吗?但它以前是由userslist方法设置的,但以前是由userslist方法设置的