Destroy do każdego childa

Witam wszystkich… Mam taki, zapewne trywialny, problemik…
Szukałem rozwiązania na forum, ale nie znalazłem, więc pytam w nowym temacie…

Otóż mam dwa modele: Post i Comment.

Oczywiście

Post has_many :comments Comment belongs_to :post
w routes.rb mam ustawione

map.resources :posts, :has_many => :comments

W widoku show dla modelu Post, wyświetla się konkretny post i wszystkie komentarze z nim związane, za pomocą takiego fragmentu:

[code]<%= render :partial => @post %>

<%= link_to 'Edit', edit_post_path(@post) %> <%= link_to 'Destroy', @post, :method => :delete, :confirm => "Czy jesteś pewien?" %> <%= link_to 'See All Posts', posts_path %>

Comments

<%#= render :partial => @post.comments %> <% for comment in @post.comments %>

Posted <%= time_ago_in_words(comment.created_at) %> ago
<%= h(comment.body) %>
<%= h(comment.author) %>

<%= link_to 'Destroy', comment, :confirm => 'Are you sure?', :method => :delete %>

<% end %>

<% remote_form_for [@post, Comment.new] do |f| %>


<%= f.label :body, “New Comment” %>

<%= f.text_area :body %>


<%= f.label :author, “Author” %>

<%= f.text_field :author %>



<%= f.submit “Dodaj komentarz” %>


<% end %>[/code]
I traz ja mam problem z następującą linijką, dotyczącą każdego z komentarzy:
<p><%= link_to 'Destroy', comment, :confirm => 'Are you sure?', :method => :delete %></p>

Otóż to mi nie działa (wyskakuje błąd undefined method `comment_path’ for #ActionView::Base:0x66b118c )…
Próbowałem na wile różnych sposobów i nie działa :confused:
W czym tkwi problem? Jak odwołać się do tego komentarza, aby można go było usuwać ??

Z góry serdecznie dziękuję za wszelką pomoc…

Spróbuj:

<%= link_to 'Destroy', [@post, comment], :confirm => 'Are you sure?', :method => :delete %>

Lub po staremu (IMHO czytelniejszy zapis):

<%= link_to 'Destroy', post_comment_path(@post, comment), :confirm => 'Are you sure?', :method => :delete %>

Żeby działało tak jak napisałeś musiałbyś użyć tzw. płytkich ścieżek: http://ryandaigle.com/articles/2008/9/7/what-s-new-in-edge-rails-shallow-routes

Wielkie dzięki!! Wiedziałem, że to musi być coś prostego :slight_smile:
A shallow routes wygląda ciekawie… Kiedy się tego powinno używać a kiedy nie? Są jakieś zalecenia albo przeciw’wskazania?

Wszystko zależy od tego, czy zasób (w tym przypadku komentarz) może być traktowany w aplikacji jako samodzielny, tzn. czy np. tworzenie komentarza niepowiązanego z artykułem ma jakiś sens. W tym przypadku raczej zostawiłbym tak jak jest - daje Ci to pewność, że wspomniana wcześniej akcja create w kontrolerze CommentsController nie zostanie nigdy wywołana bez parametru post_id.

Ano racja. Logiczne to jest. Jeszcze raz wielkie dzięki :slight_smile: !!