渲染和帖子之间的区别'和渲染帖子(没有引号)

时间:2014-07-01 15:31:17

标签: ruby-on-rails ruby actionviewhelper

我正在观看视频,并在其中呈现如下示例:

<div>
 <%= render posts %> # no quotes to posts
</div>

虽然他甚至创建了_posts.html.erb的部分内容,但他正在使用引号来发帖。

虽然他已经提到了一些关于它的内容,如它调用,活动记录模型,然后是类,然后是某些东西......我无法理解它。任何人都可以用简单的例子清楚地解释这一点。

2 个答案:

答案 0 :(得分:4)

使用引号

进行渲染
<%=render 'post'%>

Rails将在当前文件夹中查找以_

开头的部分文件

无引号呈现

   

仍然会使用相同的部分,但在这种情况下post是一个变量。我认为这正在转化为:

<%= render partial: "post", locals: {any_string: your_variable(in this case is post)} %>

我再也没有检查过。

_post.html.erb是部分的,可能如下所示:

      <b><%=any_string%></b>

如果分配给your_variable的{​​{1}}将包含字符串&#39;我的名字是&#39;

你的部分会打印出来,我的名字是&#39;用粗体。

无论如何,部分更复杂,它们用于干燥(不要重复自己)代码。

您可以看到更多示例here

答案 1 :(得分:1)

使用引号,您将显式呈现该名称的一部分。没有引号就会发生一些非常有趣的事情。 posts(不带引号)是一个变量,它将是一个activemodel记录列表。

现在对渲染的调用是什么,它将查看每个模型的类型,然后找到模型的正确部分(将是模型camel_cased的名称)并依次渲染每个模型。 / p>

编辑:

如果您有一个名为Post的模型,并且您将其中一些记录分配给变量(他使用posts我假设但我会使用foo消除歧义),如下所示:

foo = Post.all

然后通过调用render foo渲染函数将看到您有一个activerecord记录集合,然后它将检查与这些记录关联的模型(在我们的示例中为Post)并将循环遍历所有它们将它们呈现为部分名为_post.html.erb的部分,每个记录都有一个局部变量,将记录分配给post

<%= render foo %>

相当于:

<% foo.each do |my_post| %>
  <%= render partial: "post", locals: {post: my_post} %>
<% end %>