我正在观看视频,并在其中呈现如下示例:
<div>
<%= render posts %> # no quotes to posts
</div>
虽然他甚至创建了_posts.html.erb
的部分内容,但他正在使用引号来发帖。
虽然他已经提到了一些关于它的内容,如它调用,活动记录模型,然后是类,然后是某些东西......我无法理解它。任何人都可以用简单的例子清楚地解释这一点。
答案 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 %>