62

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

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

<%=render 'layouts/footer' %>

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

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

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

我在别的地方看到<%= yield :sidebar %>

那么这yield也会在其位置插入 HTML 吗?那不是render在做什么吗?

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

4

2 回答 2

127

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 将此块的内容放在布局中的那个位置。
  • 当您yield :something与 关联时content_for :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>

可能有帮助的帖子

文档和指南的链接

于 2013-05-29T20:07:52.990 回答
4

关于 render , render :partial 和 yield

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


    render :template 主要是根据带有语法 demo.html.erb 的操作创建的

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

  • 产量和渲染..


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

于 2013-06-13T09:24:40.740 回答