1

ruby on railsを学び、ルートやパスメソッドをいじる。モデル「Book」と「Author」を使用して、かなり単純なアプリケーションを作成しました。各著者は多くの本を持つことができ、すべての本は著者に属します。

すべての著者をリストするメソッド #list を持つ著者コントローラがあります。それを行うと、すべての本もエコーアウトします。ここで、私が見つけたこの気の利いたパス メソッドを使用して、各本が books#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)ダメ。

私のルートは次のようになります。

ルート: '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)ますか?

4

2 に答える 2

3

Rails Guides のResource Routingセクションを確認してください。

resources :booksつまり、 /books を index アクションに、/books/123 を show アクションにルーティングするルートで定義するという慣例があります。パスを生成するためのヘルパー メソッドもいくつかあります。

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 に答える