Przeczytałem kilka wątków na ten temat, ale mimo to nie mogłem znaleźć rozwiązania.
Postanowiłem aby w blogu na stronie głównej przechowywać podział postów ze względu na kategorie. Użyłem Join Table z post_id oraz category_id
Do tego celu użyłem następującego fragmentu kodu:
[code]<% for category in @categories %>
<%=h category.title %>
<%=h category.description %>
<% for post in category.posts %>
<%= post.title %>
<% end %>
<% end %>[/code]
Pojawia mi się komunikat:
Couldn’t find Post with ID=list
oraz fragment dziennika błędów:
E:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/base.rb:1267:in find_one' E:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/base.rb:1250:infind_from_ids’
E:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/base.rb:504:in find' app/controllers/admin/posts_controller.rb:26:inshow’
Wiem tylko, że jest to związane z faktem, że domyślnie akcja list nie istnieje i jest zastępowana akcją show.
Jak można inaczej zaimplementować podział postów ze wzdlędu na kategorie?
Jak mam wyświetlić kategorię do której należy dany post np. przy akcji show? Przy użyciu Join Table
Czy na pewno w tabeli categories_posts masz tylko dwa pola: post_id i category_id. Czy na przykład nie masz jeszcze trzeciego - id? Dla ułatwienia dodam, że jesli nie użyłeś w migracji :id => false, to masz
A jeśli masz, to tutaj pewnie tkwi błąd, bo przy has_and_belongs_to_many mieć nie wolno.
ale nie rozumiałbym wtedy idei akcji show. Bo widzę, że w akcji show nie masz wyświetlanej jednej! kategorii, czy też jednego! postu. Zatem celem Twojej akcji show jest lista wszystkich kategorii i postów z nią powiązanych. Jeśli chcesz wyświetlić pojedynczy post i kategorie z nim powiązane do w akcji show kontrolera post:
@post = Post.find(params[:id])
a w widoku
[code]<%= @post.title %>
<% for category in @post.categories %>
<%=h category.title %>
<%=h category.description %>
<% end %>[/code]
jeśli kategorie, to odwrotnie.
pozdrawiam
ps. pamietaj o tym id o którym wspomniał sharnik, ale patrząc na podany artykuł jest :id => false
@punkracy dzięki, o to właśnie mi chodziło. Działa poprawnie.
Czyli jakbym chciał sortować po kategoriach muszę zastosować coś takiego:
[code]w kontrolerze: @category = Category.find(params[:id])
w widoku:
<%= @category.title %>
<% for post in @category.posts %>
<%=h post.title %>
<%=h post.body %>
<% end %>[/code]
załóżmy, że w menu (czyli layout) chcę mieć wylistowane kategorie jako url a w nich posegregowane posty to trzeba zrobić po prostu analogicznie. Teraz już rozumiem zasadę działania. Dzięki raz jeszcze za pomoc. :cool: