link_to对象,我该如何定义路径?

时间:2014-05-16 14:33:47

标签: ruby-on-rails

假设我运行命令

rails g scaffold Movie title:string desc:text

在生成的索引文件/app/views/movies/index.html.erb中, 电影 - 对象循环播放如下:

<% @movies.each do |movie| %>
  <tr>
    <td><%= movie.title %></td>
    <td><%= link_to 'Show', movie %></td> 
    # and some other columns
  </tr>
<% end %>

我不理解link_to 'Show', movie部分。在路由文件中,Movie-objects正在使用资源路由(resources :movies),所以我无法找到它是如何工作的。

TL; DR:如果你创建一个链接link_to "Some place", theObject,它在哪里领先?我如何(重新)在路由中定义它?

1 个答案:

答案 0 :(得分:2)

要解释一下,当您使用link_to "...", object之类的内容时,您必须记住,Ruby是面向对象的,Rails期望object具有所有相关性内部包含的数据(如果设置正确)。


<强>物件

因此,如果您正在定义@movies = Movie.all,那么您将获回包含ActiveRecord个对象集合的movie对象。对于外行人来说,这将显示为一组数据对象,然后您可以使用示例中的.each循环进行循环:

<%= @movies.each do |movie| %>
  ...
<% end %>

因此,此代码将从object集合中输出每个@movies - 为Rails提供构建link_to路径所需的所有详细信息

-

<强>路由

如果您使用resources :model helper进行路由,Rails基本上会为您创建一系列RESTful路由:

GET /photos photos#index    display a list of all photos
GET /photos/new photos#new  return an HTML form for creating a new photo
POST    /photos photos#create   create a new photo
GET /photos/:id photos#show display a specific photo
GET /photos/:id/edit    photos#edit return an HTML form for editing a photo
PATCH/PUT   /photos/:id photos#update   update a specific photo
DELETE  /photos/:id photos#destroy  delete a specific photo

这就是你的link_to助手通过将对象传递给方法来知道使用哪条路线

希望这有帮助