我的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是零,但为什么会这样呢? @command是否是我班级中所有方法都可见的实例变量?
附:要调用deleteuser方法,我必须通过userslist方法,所以@command当然不是nil。
答案 0 :(得分:3)
调用@command
方法时未设置deleteuser
实例变量,因此评估为nil
。
您遇到此错误的原因是您可能误解了Rails控制器的工作原理。 Rails会根据有关此控制器的每个请求创建命令控制器的新实例,因此即使您在上一个操作中设置了@command
实例变量,新请求也会再次nil
。
我建议学习一些Rails / Ruby基础知识和约定(包括命名约定)。
答案 1 :(得分:0)
您可以创建另一个私有方法来声明@command
并在声明控制器类之后在before_filter中调用它