我认为@user
是一个实例变量,应该在我访问localhost://users/1
后设置,现在如果我导航到localhost://users/new
,为什么@user
为零?< / p>
class UsersController < ApplicationController
def new
# normally you would create a new model and assign it to the instance variable,
# but if I comment it out, why is it nil instead of keeping the value from show action?
# @user = User.new
end
def show
@user = User.find(params[:id])
end
end
答案 0 :(得分:4)
实例变量仅对请求的范围“实时”。在每个请求期间创建控制器类的新实例。因此,如果您访问show页面,则会使用show方法创建控制器实例。当您访问new时,将销毁当前控制器并创建一个新控制器并调用新方法。
答案 1 :(得分:0)
实例变量的名称以@开头,其范围仅限于自己引用的任何对象。两个不同的对象,即使它们属于同一个类,也允许它们的实例变量具有不同的值。从对象外部,实例变量不能被改变甚至观察(即,ruby的实例变量永远不会公开),除非程序员明确提供了任何方法。与全局变量一样,实例变量在初始化之前具有零值。 有关详细信息,请参阅 http://www.railstips.org/blog/archives/2006/11/18/class-and-instance-variables-in-ruby/