2012-10-17 2 views
1

루비를 레일에서 학습하여 경로 및 경로 메서드로 재생합니다. "Book"및 "Author"모델을 사용하여 매우 간단한 응용 프로그램을 만들었습니다. 각 저자는 많은 책을 가질 수 있으며, 모든 책은 저자 등에 속할 수 있습니다.Ruby path_to는 명시 적 일 때만 작동합니다.

모든 저자를 나열하는 #list 메소드로 작성자 컨트롤러가 있습니다. 그렇게하면 모든 책이 울려 퍼집니다. 이제 각 책이 내가 찾은 멋진 경로 방법으로 책 # 쇼를 가리 키기를 바랍니다.

여기 내 코드 조각입니다 : 잘 작동이 link_to book.name, controller: :books, action: :show, id: book.id으로

<% @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 %> 

하지만, 뭔가 같은 훨씬 쉽게 달성 할 수있다 나에게 알려줍니다. books_show_path(book)을 사용하면 작동하지 않습니다.

내 경로는 다음과 같이 :

루트로 :

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)을 작동 시키려면 어떻게해야합니까?

답변

3

체크 아웃 Resource Routing 섹션을 읽어 것이 좋습니다. 한마디로

는 규칙은 당신이 루트에서 그 의지 경로를 resources :books을 정의하는 것입니다/index 액션에 책과/책/123 경로를 생성하기 위해 당신은 또한 일부 도우미 방법이있을 것이다 등의 조치를 표시하려면

을 사실, LINK_TO과 다른 방법의 무리에서
book_path(book) #=> /books/123 
books_path #=> /books 

객체 자체에서 경로를 생성 할 수 있습니다

link_to book.name, book # will also call book_path(book) under the hood 
2

as 옵션은 경로 이름

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

입니다하지만 난 강력 레일 가이드의 약 resource routing

+0

이 최고, 감사합니다! 한 가지 더 질문 : 어떻게 books_list_path를 받아 들일 수 있도록 라우트에서이 'match'books/list '=>'books # list''라고 말할 필요가 없었습니까? – weltschmerz

+0

나는 나의 대답을 편집했다. 레일스 문서 –

+0

ok를 읽어 보아라. 고마워. 고마워. – weltschmerz