假设我运行命令
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
,它在哪里领先?我如何(重新)在路由中定义它?
答案 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
助手通过将对象传递给方法来知道使用哪条路线
希望这有帮助