0

当我渲染部分视图或渲染未直接映射到控制器的视图时,此其他视图是否可以访问控制器的实例变量?

4

2 回答 2

0

是的,Rails 允许多个视图共享控制器中定义的实例变量。但是,您应该避免在多个视图之间共享实例变量,这是因为实例变量可能会在视图内更改,并且不具有打算在下一个视图中显示的原始值。

以下是根据 Ryan Bates 在这篇文章(Rails:Should partials be aware of instance variables?)中使用渲染访问实例变量的指南:

  1. 永远不要创建实例变量只是为了在部分之间共享它。通常这意味着您将只共享控制器资源对象。

  2. 如果部分与资源同名,则使用 <%= render @item %> 将其作为本地传递。

  3. 如果部分将在多个控制器之间共享,则仅使用本地。

于 2014-10-30T21:36:35.367 回答
0

实际上,您不会直接访问控制器操作中存在的控制器实例变量,发生的事情是 rails 克隆它们并将它们传递给视图。然后,您可以通过这些克隆访问它们的值。

在请求期间,您只能在控制器操作的对应视图中访问这些克隆变量。但是,您的应用程序为每个用户都有一个会话,您可以在其中存储少量数据,这些数据将在请求之间持久化。

于 2013-07-10T10:55:14.877 回答