Mam dwa modele :category i article gdzie relacja jest category has many articles i article belongs to category.
Zrobiłem listę kategorii i po naciśnięciu na nazwę pokazują mi się art. przypisane do danej kategorii. Nie wiem jak zrobić żeby po kliknięciu na tytuł artykułu który mi się wyświetlił pokazywał mi się cały art.
w widoku category show mam :
<% @category.articles.each do |a| %>
<%= link_to a.title %>
<-próbując wstawić tutaj np. link_to a.title, article dostaję "undefined local variable or method `article'
<% end %>
Do “Starszych i mądrzejszych” mam pytanie: Czy odwołanie do bazy danych bezpośrednio w widoku, jak ma to miejsce tutaj, nie jest czasem w jakiś sposób “niehigieniczne”? Czy nie lepiej w takiej sytuacji w kontrolerze zrobić @articles = @category.articles
?
A Twój link, jak się zdaje, powinien raczej wyglądać tak:
link_to(a.title, a)
Swoją drogą, znacznik początku nieuporządkowanej listy powinien stać przed wejściem do pętli.
[quote=Arnvald]Tak powinno być (jeżeli w routes jest “resources :articles” bez zagnieżdżenia):
<li><%= link_to a.title, article_path(a) %></li>
[/quote]
Racja, zapomniałem o routes. Swoją drogą nie wiem, czy nie warto by było polecić Koledze Autorowi wątku zapoznanie się właśnie z resource routes i ich zagnieżdżaniu - być może mogłoby się tutaj sprawdzić.
W takim razie w jakich widokach należy na to zwracać uwagę?
@sagit: na pewno w tej linii pokazuje się błąd? może w innej linijce używasz zmiennej article, a ona nie jest zdefiniowna, w bloku each masz tylko zmienną a
@Lypa: taki najprostszy przykład - jak masz widok articles/index to raczej oczekujesz tam zmiennej @articles - zgodnie z konwencją.
Oczywiście dochodzą np. współdzielone partiale, gdzie powiedzmy w każdym widoku chcesz mieć kilka ostatnich artykułów, więc tam w ApplicationController możesz ustawiać zawsze zmienną @last_articles czy coś takiego.
@Arnvald tak błąd wskazuje na ta linie.
Wydaje mi się ,że muszę “udostępnić” zmienną article dla pozostałych kontrolerów i chyba robi się to poprzez ApplicationController a może idę w złym kierunku??