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方法设置的