Rails控制器中实例变量的范围是什么?

时间:2016-03-06 14:33:47

标签: ruby-on-rails ruby ruby-on-rails-4

如果我在Rails控制器中创建实例变量,那么该实例变量的范围是什么?是否可用于所有Rails应用程序,或仅用于与该特定控制器关联的视图和模型?由于我是Rails的新手,我有点困惑。

1 个答案:

答案 0 :(得分:8)

Rails控制器中的实例变量以两种方式使用:

  • 它可以在该控制器的实例方法中使用(包括超类实例方法),就像任何其他Ruby实例变量一样。
  • 当Rails控制器操作呈现视图时,控制器的实例变量将(浅)复制到视图实例。 (视图实例是模板中self的值。)因此,在操作视图中有效地提供了在操作呈现时定义的控制器实例变量。视图助手只是由视图实例扩展的模块,因此控制器实例变量也可以在视图助手方法中有效使用。

    请注意,虽然控制器实例变量被复制到视图中,但视图中定义的实例变量不会复制回控制器。这通常不是你通常需要发生的事情,因为渲染视图通常是在控制器动作中完成的最后一件事。视图中定义的局部变量在整个视图中都可用,因此根本没有理由在视图中定义实例变量。

给定控制器中的实例变量在其他控制器,其他控制器视图或任何模型中都不可用。