【问题标题】:How does linking in an html.erb document work?html.erb 文档中的链接如何工作?
【发布时间】: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 文件,它应该形成一个表格视图。在他们到达&lt;tbody&gt; 之前,我似乎一切都清楚。

这里,首先,我们正在迭代一个实例变量@categories...现在,在哪里找到这个实例变量,我不知道。我认为实例变量意味着它们只能在特定类中使用,但这是一个标记页面,即没有定义任何类,那么 Ruby 怎么知道这个实例变量在哪里或什么?

下一步:所以,据我了解,这里的“类别”一词用作变量,因为它是由两行前的管道语法指定的。现在,这个变量是否可以在这个 html.erb 页面之外使用是我无法理解的,因为我认为实例变量用“@”表示。使用此变量,我们将方法称为“名称”。那么,'name' 是自定义方法吗?如果是,它在哪里定义?

现在,第三个 &lt;td&gt; 标记包含告诉 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


【解决方案1】:

实例变量@categories 应该在CategoriesController 中定义,它是动作控制器的子类。 Ruby 的实例变量不是持久的,您在控制器操作中定义的任何 @variables 都可以在操作视图中访问。我不确定你是否熟悉MVC模式,如果不熟悉,你可以看看这个问题:

What is MVC in Ruby on Rails?

名称是资源/模型类别的属性。您应该在 app/model/category.rb 中看到它的类。它是 ActiveRecord 的子类,充当您选择的数据库的包装器。因此,您可能有一个名为“类别”的数据库表,列名为“名称”。

正如@JoelL 所提到的,link_to 是视图助手,旨在简化视图文件中的语法,使您的代码更有条理,并节省您的时间。你可以在 app/helpers 中定义你自己的视图助手。当您在 config/routes.rb 中定义资源 :resource_name 时,会自动为您创建一些帮助程序。在这种情况下,您的 config/routes.rb 中可能有资源 :categories

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-07
    • 2016-05-11
    • 1970-01-01
    • 2019-06-10
    • 2021-10-16
    • 1970-01-01
    相关资源
    最近更新 更多