在轨道上学习红宝石,玩弄路线和路径方法。 我用模型“Book”和“Author”构建了一个相当简单的应用程序。每个作者可以有很多书,每本书都属于作者等。
我有一个作者控制器,其中列出了所有作者的方法#list。当它这样做时,它也回应了他们所有的书。现在我希望每本书都能用我发现的这种漂亮的路径方法指出书#shour。
这是我的代码:
<% @authors.each do |author| %>
<li><%= author.name %></li>
<ul>
<% author.books.all.each do |book| %>
<li><%= link_to book.name, controller: :books, action: :show, id: book.id %></li>
<% end %>
</ul>
<% end %>
使用此link_to book.name, controller: :books, action: :show, id: book.id
它可以正常工作,但有些东西告诉我同样可以更容易实现。如果我使用books_show_path(book)
则无效。
我的路线如下所示:
root to:'authors#list'
match 'authors/list' => 'authors#list'
match 'books/list' => 'books#list'
match 'authors/:id/delete' => 'authors#delete'
match 'authors/:id/show' => 'authors#show'
match 'books/:id/show' => 'books#show'
我在这里做错了什么?我需要做些什么才能让books_show_path(book)
工作?
答案 0 :(得分:3)
查看Rails指南的Resource Routing部分。
简而言之,惯例是您在路由中定义resources :books
,将路由/书籍定义为索引操作和/ books / 123以显示操作等。您还将有一些帮助方法来生成路径:
book_path(book) #=> /books/123
books_path #=> /books
实际上,link_to和一堆其他方法可以从对象本身生成路径:
link_to book.name, book # will also call book_path(book) under the hood
答案 1 :(得分:2)