【发布时间】:2015-04-21 13:06:23
【问题描述】:
<h1>Listing categories</h1>
<table>
<thead>
<tr>
<th>Name</th>
<th>Thumburl</th>
<th colspan="3"></th>
</tr>
</thead>
<tbody>
<% @categories.each do |category| %>
<tr>
<td><%= category.name %></td>
<td><%= category.thumburl %></td>
<td><%= link_to 'Show', category_path(category) %></td>
<td><%= link_to 'Edit', edit_category_path(category) %></td>
<td><%= link_to 'Destroy', category, method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
</tbody>
</table>
<%= link_to 'New Category', new_category_path %>
所以,正如我在上一篇文章中所说,我正在尝试浏览我在 Codecademy 的 RoR 教程中找到的 Ruby 代码。由于他们有如此简单的教程,我认为不理解他们扔给我的所有东西是很荒谬的。
在这一点上,他们有一个 html.erb 文件,它应该形成一个表格视图。在他们到达<tbody> 之前,我似乎一切都清楚。
这里,首先,我们正在迭代一个实例变量@categories...现在,在哪里找到这个实例变量,我不知道。我认为实例变量意味着它们只能在特定类中使用,但这是一个标记页面,即没有定义任何类,那么 Ruby 怎么知道这个实例变量在哪里或什么?
下一步:所以,据我了解,这里的“类别”一词用作变量,因为它是由两行前的管道语法指定的。现在,这个变量是否可以在这个 html.erb 页面之外使用是我无法理解的,因为我认为实例变量用“@”表示。使用此变量,我们将方法称为“名称”。那么,'name' 是自定义方法吗?如果是,它在哪里定义?
现在,第三个 <td> 标记包含告诉 Ruby 链接到某个名称“Show”的代码,但我不确定这个名称指向什么...另外,“category_path”是我们在我们的 routes.rb 文件,它有我们的阻塞变量 'category' 的参数。
最后,最后一行单元格链接到某个名称“Destroy”,但这种逗号语法是我以前从未见过的:
<td><%= link_to 'Destroy', category, method: :delete, data: { confirm: 'Are you sure?' } %></td>
【问题讨论】:
-
category 是一个变量,包含@categories 集合中的一个元素,该元素将由Categories Controller 创建。它的“存在”是在 each.do / end 循环的持续时间内。下一次迭代,它是与集合不同的元素。在循环之外,它不存在。类别路径助手使用了一些 Rails 魔法,如果您将对象传递给它,并且路径需要一个 ID,它会使用该对象的 ID 属性(category.id,而不是对象 ID)。
标签: ruby-on-rails ruby erb link-to