如何在html.erb文档中进行链接?

时间:2015-02-19 23:30:44

标签: ruby-on-rails ruby erb link-to

<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 %>

所以,正如我在上一篇文章中所说,我试图通过Ruby代码,因为我在Codecademy的RoR教程中找到它。由于他们有这么简单的教程,我觉得不理解他们扔给我的一切都是荒谬的。

在这一点上,他们有一个html.erb文件,它应该形成一个tabled-view。在他们到达<tbody>之前,一切似乎都很清楚。

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

下一步:所以,据我所知,这里的“&#39; category&#39;”这个词用作变量,因为之前通过管道语法两行指定了它。现在,这个变量是否可以在这个html.erb页面之外使用是超出我的,因为我认为实例变量用&#39; @表示。&#39;使用此变量,我们将方法命名为&#39; name&#39;。所以,名字是&#39;自定义方法,如果是这样,它在哪里定义?

现在,第三个<td>标记包含的代码告诉Ruby链接到某个名称&#39;显示,&#39;但是我不确定这个名字指的是什么......还有,&#39; category_path&#39;是我们在routes.rb文件中定义的方法,它具有我们被阻止的变量&#39;类别的参数。&#39;

最后,最后一行单元格链接到某个名称&#39; Destroy,&#39;但这个逗号语法是我以前见过的:

<td><%= link_to 'Destroy', category, method: :delete, data: { confirm: 'Are you sure?' } %></td>

1 个答案:

答案 0 :(得分:0)

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

What is MVC in Ruby on Rails?

名称是资源/模型类别的属性。你应该在app / model / category.rb中看到它的类。它是ActiveRecord的子类,它充当您选择的数据库的包装器。所以你可能有一个名为categories的数据库表,列名为&#39; name&#39;。

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