2013-04-29 14 views
11

Jestem zupełnie nowym użytkownikiem w Rails.Jak używać Link_to z zagnieżdżonymi zasobami

Stworzyłem aplikację internetową, mogę uzyskać dostęp przez /posts/123/comments/ lub /posts/123/comments/new, ale nie wiem, jak użyć łącza w widoku indeksu, aby wyświetlić konkretny komentarz, gdy próbuję go połączyć, pojawia się komunikat "brak trasy" "lub" niezdefiniowany symbol ".

Mam zagnieżdżoną relację have_many między postami i komentarzami zdefiniowanymi w modelach, aw routes.rb i post_comments GET /posts/:post_id/sensors(.:format)comments#index pojawia się po uruchomieniu tras rake.

Jak mogę to zrobić?

Odpowiedz

7

Po wypróbowaniu wszystkich odpowiedzi nie zrobił całkowicie działać, ale znalazł sposób, aby go rozwiązać. W pierwszej chwili, użyłem

post_comments_url (@ post, komentarz)

gdzie komentarz jest pozycją wewnątrz @ post.each.

Generuje "dziwną" trasę, używając. zamiast/jak "post/34/comments.2" Naprawiłem go za pomocą formularza pojedynczej:

post_comment_url (@ poczta, komentarz)

Dzięki za pomoc!

+0

czy próbowałeś' link_to 'show', [@post, comment] '? – toch

12

Jeśli zdefiniowano zagnieżdżonych zasobów (i oczywiście modele Comment i Post wiążą)

resources :posts do 
resources :comments 
end 

Można połączyć komentarz jako następujące

<!-- /posts/:post_id/comments/:id --> 
<%= link_to 'Show', [@comment.post, @comment] %> 

Napisałem full example of nested resources in a past blog post

+0

Zmieniłem kod na <% @ posts.each do | item | %> <% = pozycja.Imię%> <% = item.info%> <% = link_to 'Pokaż' [@ comment.post, @comment]%> <% end %> i nie robi prowadzony ... pojawia się niezdefiniowany post metody. Jak mogę to zrobić? Dzięki! – fuco

+0

To prawdopodobnie dlatego, że twój model "Comment" nie jest powiązany z 'Post'. Powinieneś mieć 'belongs_to: post' w swoim modelu' Comment'. Jeśli nie, to normalne, że jest niezdefiniowane. Możesz również zamienić '@ komentarz.post' na obiekt' Post' zawierający komentarz (prawdopodobnie 'item' w twoim przypadku). – toch

+0

To nie działa dla mnie: narzeka, że ​​'post_comment_path' jest niezdefiniowana (routing, który pokazuje w' trasach prowizji' to 'post_comments', liczba mnoga) – digitig

0

Oprócz odpowiedzi na toch, możesz debugować swoje wywołanie link_to za pomocą konsoli Rails.

Do tego trzeba załadować widoku pomocników w konsoli:

irb(main):001:0> include ActionView::Helpers::UrlHelper 
=> Object 
irb(main):002:0> helper.link_to "posts", app.posts_path 
=> "<a href=\"/posts\">foo</a>" 

Kolejnym narzędziem, podobnie jak Rake tras dla debugowania trasa: https://github.com/schneems/sextant

1

Get nazwa metody z pierwszej kolumnie

rake routes 

I odpowiednio przekazać identyfikatory. I oczywiście przyrostek nazwa metody z _path ir _url Aby dowiedzieć się więcej, odwiedź Rails guide

Powiązane problemy