gpt4 book ai didi

ruby-on-rails - Rails 中 View 的解析过程

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

rails 中 View 的解析过程是怎样的?我对 View 中 erb 标记中原始 html 与 ruby​​ 代码的解析顺序 部分感兴趣。

我认为这是 View 代码被解析并最终发送给请求者的顺序:

  • Controller 调用 View
  • View 代码从上到下解析
    • 当 Rails 在解析过程中 遇到 erb 标记时:rails 解析它并将结果附加到解析的 html(这包括 erb标签引用助手)
  • 一旦整个 View 被解析,整体结果将发送给请求者

这似乎并非如此。看来 View 代码会扫描任何 erb 片段并首先 解析那些片段(包括对助手的引用)。 之后,rails 然后从上到下解析所有 View 代码并将结果发送给请求者。

以这个 View 为例:

# _form.html.erb
<p> Hello World </p>
<p> Foobar </p>
<% if something_is_true %>
<%= some_helper_method_that_returns_html %>
<% end %>

这是 Rails 计算 View 并将结果发送给请求者的正确顺序吗?

  • Rails 扫描 Controller 调用的 View :以及此 View 引用的任何 View 部分,以查看是否有任何 erb 片段
    • 对于所有 erb 片段,这些片段被解析/转换为 html 并附加到 html View
  • 然后 Rails 从上到下解析 View (此时, View 是自身加上任何引用的部分,以及之前 erb
  • 的所有 html 的集合
  • View 完全解析后:Rails 将结果发送给请求者

跟进问题:erb 标签本身是否有解析命令?例如:也许引用 helpererb 标记在遍历集合的 erb 标记之前首先被解析?或者:Rails 总是从上到下解析 erb 标签吗?

最佳答案

您认为 View 代码将从上到下读取并以这种方式处理是正确的。但是这种方法有一个问题。 ERB 是一个模板引擎/库,要使模板引擎快速,它必须智能地工作。

渲染 Action 的过程是这样的:

  • 请求被传递给 Controller ​​
  • 过滤器运行前后
  • 运行指定的操作,现在 Rails 知道要呈现哪个文件
  • ERB 代码是从 ERB 文件中挑选出来的,忽略了所有的 HTML,因为 Rails 不知道如何处理它
  • ERB 代码以有序的方式处理。例如:

    <%= render 'my_header' %>
    This is some HTML
    <%= render 'my_footer' %>

    在这种情况下,文件 _my_header.html.erb将首先处理和注入(inject),然后 _my_footer.html.erb将被处理和注入(inject)。 ERB 标签从上到下解析。

  • 整个文件被注入(inject)到布局文件中代替<%= yield %>
  • 过滤器运行后且周围过滤器关闭
  • 数据发送给客户端

我希望这能解决您关于 ERB 图书馆的所有问题。

关于ruby-on-rails - Rails 中 View 的解析过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38511314/

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