2

我正在浏览一个视频,他正在渲染如下示例:

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

尽管他甚至创建了一个部分 with _posts.html.erb,但他正在调用帖子的引号。

虽然他提到了一些关于它的东西,比如它所调用的,活动记录模型,然后是类,然后是一些东西......我无法正确理解它。谁能用简单的例子清楚地解释这一点。

4

2 回答 2

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分配给any_string将包含字符串“我的名字是”

您的部分将以粗体打印“我的名字是”。

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

您可以在此处查看更多示例。

于 2014-07-01T15:42:10.080 回答
1

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

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

编辑:

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

foo = Post.all

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

<%= render foo %>

相当于:

<% foo.each do |my_post| %>
  <%= render partial: "post", locals: {post: my_post} %>
<% end %>
于 2014-07-01T15:42:43.950 回答