1

我认为@user是一个实例变量,应该在我访问 之后设置localhost://users/1,现在如果我导航到localhost://users/new,为什么@user是 nil?

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
4

2 回答 2

4

实例变量仅在请求范围内“活动”。在每个请求期间都会创建一个控制器类的新实例。因此,如果您访问显示页面,则会使用调用的 show 方法创建控制器的实例。当您访问 new 时,当前控制器被销毁并创建一个新控制器并调用新方法。

于 2013-04-02T04:49:47.537 回答
0

实例变量的名称以 @ 开头,其范围仅限于 self 所指的任何对象。两个不同的对象,即使它们属于同一个类,也允许它们的实例变量具有不同的值。从对象外部,实例变量不能被改变甚至观察(即,ruby 的实例变量永远不会公开),除非通过程序员明确提供的任何方法。与全局变量一样,实例变量在初始化之前都具有 nil 值。有关更多详细信息,请参阅: http ://www.railstips.org/blog/archives/2006/11/18/class-and-instance-variables-in-ruby/

于 2013-04-02T04:56:08.417 回答