我正在浏览一个视频,他正在渲染如下示例:
<div>
<%= render posts %> # no quotes to posts
</div>
尽管他甚至创建了一个部分 with _posts.html.erb
,但他正在调用帖子的引号。
虽然他提到了一些关于它的东西,比如它所调用的,活动记录模型,然后是类,然后是一些东西......我无法正确理解它。谁能用简单的例子清楚地解释这一点。
我正在浏览一个视频,他正在渲染如下示例:
<div>
<%= render posts %> # no quotes to posts
</div>
尽管他甚至创建了一个部分 with _posts.html.erb
,但他正在调用帖子的引号。
虽然他提到了一些关于它的东西,比如它所调用的,活动记录模型,然后是类,然后是一些东西......我无法正确理解它。谁能用简单的例子清楚地解释这一点。
用引号渲染
<%=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
将包含字符串“我的名字是”
您的部分将以粗体打印“我的名字是”。
无论如何,部分更复杂,它们用于干燥(不要重复自己)代码。
您可以在此处查看更多示例。
使用引号,您将显式呈现该名称的一部分。没有引号会发生一些非常有趣的事情。帖子(不带引号)是一个变量,它将是记录的活动模型列表。
现在对 render 的调用将查看每个模型的类型,然后找到模型的正确部分(这将是模型 camel_cased 的名称)并依次渲染每个模型。
编辑:
如果您有一个模型Post
,并且您将其中一些记录分配给一个变量(他使用posts
我假设但我将使用它foo
来消除歧义),如下所示:
foo = Post.all
然后通过调用render foo
render 函数将看到您有一个 activerecord 记录集合,然后它将检查与这些记录关联的模型(Post
在我们的示例中)并循环遍历所有这些记录,将它们渲染到使用_post.html.erb
局部变量调用的部分将记录分配给的每条记录post
。
<%= render foo %>
相当于:
<% foo.each do |my_post| %>
<%= render partial: "post", locals: {post: my_post} %>
<% end %>