【问题标题】:In a Rails view, which objects are in the response chain?在 Rails 视图中,响应链中有哪些对象?
【发布时间】:2014-04-02 17:33:15
【问题描述】:

当我在视图文件中调用方法 foo() 或引用属性 @bar 时,哪个对象会响应?

例如,如果我有一个部分 _ebook.html.erb,看起来像

<h2>Your eBook</h2>
<p>Title: <%= @title %></p>
<p>Due Date: <%= due_date(customer) %>
etc.

哪个对象提供@title、due_date 和customer?这些会冒泡到 BooksController 及其模块/超类吗?

另外,如果我的渲染包括本地人,例如

render partial: "ebooks", locals: {baz: @qux}

baz 存储在哪个对象中?

【问题讨论】:

    标签: ruby-on-rails rendering


    【解决方案1】:

    不是其他对象为您的模板提供局部变量,而是您的模板正在被上下文中存在对象的控制器读取。

    erb 模板注解@bar 等变量,并由控制器进行相应渲染。如果控制器实际上有一个 @foo 并且您想将其用作模板中的 @bar 插件 locals: {bar: @foo}

    【讨论】:

      【解决方案2】:

      我已经找到了大部分答案,至少对于 Rails 3.2.x。这是我写得不好的描述:

      作为渲染的一部分,ActionView::Base#prepare 创建了ActionView::Base 的匿名子类的实例,并添加了几个帮助模块。

      然后view_assigns 方法将控制器的实例变量存储在该实例的哈希中。

      局部变量作为散列传入并存储在同一实例中名为locals 的实例变量中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多