当我渲染部分或渲染未直接映射到控制器的视图时,此其他视图是否可以访问控制器的实例变量?
答案 0 :(得分:0)
实际上,您不直接访问控制器操作中存在的控制器实例变量,会发生的情况是rails克隆它们并将它们传递给视图。然后,您可以通过这些克隆访问它们的值。
您只能在请求期间在控制器操作的对应视图中访问这些克隆变量。但是,对于每个用户,您的应用程序都有一个session,您可以在其中存储将在请求之间保留的少量数据。
答案 1 :(得分:0)
是的,Rails允许多个视图共享控制器中定义的实例变量。但是,您应避免在多个视图之间共享实例变量,这是因为实例变量可能在视图中更改,并且没有原始值,以便在下一个视图中显示。
以下是根据Ryan Bates在这篇文章(Rails: Should partials be aware of instance variables?)中使用渲染访问实例变量的指南:
永远不要创建实例变量只是为了在部分之间共享它。通常这意味着您将只共享控制器资源对象。
如果partial与资源名称相同,请将其作为本地传递给<%= render @item%>。
如果部分将在多个控制器之间共享,则只使用本地。