1

学习 ruby​​ on rails,玩转路线和路径方法。我用“Book”和“Author”模型构建了一个相当简单的应用程序。每个作者可以有很多本书,每本书都属于一个作者,等等。

我有一个作者控制器,其方法 #list 列出了所有作者。当它这样做时,它也会呼应他们所有的书。现在我希望每本书都使用我找到的这种漂亮的路径方法指向书籍#show。

这是我的片段:

<% @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)它就行不通。

我的路线如下所示:

根到:'作者#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)工作?

4

2 回答 2

3

查看Rails 指南的资源路由部分。

简而言之,约定是您resources :books在路由中定义,将 /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
于 2012-10-17T12:09:07.923 回答
2

as选项用于路线名称

 match 'books/:id/show' => 'books#show', as: :books_show

但我强烈建议您阅读资源路由

于 2012-10-17T12:06:01.980 回答