gpt4 book ai didi

ruby-on-rails - Controller 中的实例变量如何可用于 Rails 中的 View

转载 作者:数据小太阳 更新时间:2023-10-29 07:05:50 24 4
gpt4 key购买 nike

我从事 Rails 已有一段时间,并且刚刚开始深入研究 Ruby 元编程,Rails 从中获得了强大的力量。我真的想不通这个,这让我发疯。 Controller 中的实例变量如何提供给 Rails 中的 View (与 View 共享)?我知道它背后有一些元编程魔法,但我无法弄明白。在此先感谢您的所有帮助。

最佳答案

更新:原来接受的答案是错误的

我现在将它留在下面以证明我错了。在获得足够多的反对票后,我决定研究这实际上是如何工作的。我最初的回答是在我对 Rails 还很陌生之后写的,并且是基于我使用过的其他 MVC 库(特别是:CodeIgniter)的工作方式的假设。

它是如何工作的(从 Rails 4 开始)

AbstractController(ActionController::Base 包含并且您的 ApplicationController 继承自)包含一个名为 view_assigns 的方法.此方法从 Controller 的上下文中获取所有(未 protected )实例变量,并以散列形式返回它们。此方法由 ActionView::Base ( here ) 的实例使用。

因此,基本上,实例变量是通过一些元编程魔法通过散列提供给您的 View 的。您的 View 绝对不会在 Controller 的上下文或范围内执行。这就是为什么您必须显式地将 Controller 方法声明为辅助方法以使其对您的 View 可见。该功能由单独的元编程层启用。

原(错误)答案:

它并没有那么复杂或“元”。 ActionController#render 方法在当前 ApplicationController 实例的范围内执行模板代码(erb、haml 等)。这意味着模板中的所有代码都在 ApplicationController 中的方法内执行,因此可以访问在其中执行的对象的实例变量。

如果您不调用 render,那么 ApplicationController 将根据操作名称尝试确定调用哪个模板来调用 render

关于ruby-on-rails - Controller 中的实例变量如何可用于 Rails 中的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8528411/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com