实例变量Rails

时间:2013-09-24 09:56:04

标签: 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
    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。

2 个答案:

答案 0 :(得分:3)

调用@command方法时未设置deleteuser实例变量,因此评估为nil

您遇到此错误的原因是您可能误解了Rails控制器的工作原理。 Rails会根据有关此控制器的每个请求创建命令控制器的新实例,因此即使您在上一个操作中设置了@command实例变量,新请求也会再次nil

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

答案 1 :(得分:0)

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