【问题标题】:Difference between Render and Render Partial and Yield渲染和渲染部分和产量之间的区别
【发布时间】:2013-05-29 19:59:10
【问题描述】:

我已经从 Rails 指南中阅读过它,看过 Micheal Hartel 的书,现在从 Rails View 书中阅读它,但我仍然感到困惑:(

有一个_footer.html.erb 文件所以它是一个“部分”并且在它编写的代码中:

<%=render 'layouts/footer' %>

所以我的理解是,当它看到这个时,会在此处插入页脚文件的 HTML。行... 现在几页后它说:

<%= render partial: 'activitiy_items/recent' %>

那么为什么这次我们在这里有“部分”这个词,但我们在上一次没有这个词?

我在其他地方看到&lt;%= yield :sidebar %&gt;

所以这个yield 也插入了HTML?这不是render 在做什么吗?

我希望如果其他程序员而不是书籍向我解释这一点,也许这次我明白了:)

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3.2


    【解决方案1】:

    render & render partial:

    • render 'some_view'render partial: 'some_view' 的简写。
    • render file: 'view' 将查找文件 view.html.erb 而不是 _view.html.erb.erb 或您使用的任何其他渲染器)
    • render 将不接受局部变量的附加局部变量,您需要使用render partial:,如下所示:

      render partial: 'some/path/to/my/partial', locals: { custom_var: 'Hello' }
      

    (http://guides.rubyonrails.org/layouts_and_rendering.html#passing-local-variables)

    yield & content_for

    • yield 通常用于布局。它告诉 Rails 将此块的内容放在布局中的那个位置。
    • 当您执行与content_for :something 关联的yield :something 时,您可以传递一段代码(视图)来显示yield :something 的放置位置(参见下面的示例)。

    一个关于产量的小例子:

    在您的布局中:

    <html>
    <head>
     <%= yield :html_head %>
    </head>
    <body>
     <div id="sidebar">
       <%= yield :sidebar %>
     </div>
    </body>
    

    在你的一个观点中:

    <% content_for :sidebar do %>
      This content will show up in the sidebar section
    <% end %>
    
    <% content_for :html_head do %>
      <script type="text/javascript">
        console.log("Hello World!");
      </script>
    <% end %>
    

    这将产生以下 HTML:

    <html>
    <head>
      <script type="text/javascript">
        console.log("Hello World!");
      </script>
    </head>
    <body>
     <div id="sidebar">
       This content will show up in the sidebar section
     </div>
    </body>
    

    可能有帮助的帖子

    文档和指南的链接

    【讨论】:

    • 进一步了解他的答案,请查看此内容以供参考:guides.rubyonrails.org/v2.3.8/…
    • yield :something 将在content_for :something 中提供的代码块上调用renderrender 在被调用时只会生成 HTML。
    • yield 是一个 Ruby 关键字 - 它并非特定于 Rails。一年前,当我从 Java 和 PHP 毕业时,我很难理解它。
    • render :partial 'some/path/to/my/partial' 应该是render partial: 'some/path/to/my/partial'
    • 您可以在没有 :partial 的情况下将变量传递给渲染,至少在 Rails 4 中是这样。例如。渲染“一些/路径/到/我的/部分”,custom_var:“你好”。请参阅此处的“呈现默认情况”:api.rubyonrails.org/classes/ActionView/PartialRenderer.html
    【解决方案2】:

    关于 render , render :partial 和 yield

    • render :template 和 render :partial 是 rails 中的两个文件..


      render :template 大多是根据一个动作创建的,语法为 demo.html.erb

      render :partial 可重用并从不同视图调用,在应用程序中的许多页面之间共享,语法为 _demo.html.erb

    • 屈服和渲染..


    Yield 是一种使用其输出调用代码块的方法,但渲染将在调用它的位置包含部分页面模板。在 Rails 中,yield 主要用于布局,而 render 用于操作或其模板

    【讨论】:

    • 这对于 render :partial 的语法是非常不正确的 - render :partial 是一个扩展的形式,并且接受上面提到的 MrYoshiji 所写的局部变量 .. “_” 表示不是动作的部分 .. all动作(在控制器中定义)是不带前缀(“_”)编写的——您可以使用 rails convections 在任何定义的单/复数模型名称上调用 render
    猜你喜欢
    • 1970-01-01
    • 2011-06-30
    • 1970-01-01
    • 1970-01-01
    • 2011-12-20
    • 2015-02-17
    • 2017-10-19
    • 2019-06-09
    • 1970-01-01
    相关资源
    最近更新 更多