Render partial a kontrolery

Problem prawdopodobnie trywialny, ale szarpię się z nim od paru godzin a wg. googla nie tylko ja mam z tym problem, a dużo początkujących użytkowników Railsów.
I nie znalazłem nigdzie rozsądnej odpowiedzi.
Mogę go przedstawić w dwóch ujęciach.

Mam tabelę w bazie nie związaną w żaden sposób z modelami i kontrolerami aplikacji railsowej.
Tabela jest zasilana danymi przez zewnętrzny skrypt.

Ujęcie pierwsze:
Jak w widoku aplikacji railsowej “wyciągnąć” te dane.

Testowo (tylko proszę się nie śmiać) wpisałem sobie w widoku całe połączenie z bazą i selectem wyciągam te dane i je wyświetlam - i to działa.
Tyle, że jak się domyślam, trudno to nazwać profesjonalnym programowaniem. Prawdopodobnie trzeba by napisać tutaj sobie helper.
Wymyśliłem sobie więc trochę inaczej - dopisanie całego modelu z kontrolerem wygenerowane za pomocą scaffolda (tylko index i show), potem poprawiłem w tym co teoretycznie trzeba i to też działa… teoretycznie.

Ujęcie drugie:
Jak wyświetlić widok z modelu jako “partial” bez konieczności dopisywania w każdym kontrolerze aplikacji definicji dla tego obiektu.
Chcę mieć wyświetlany “index” lub “show” w głównym layoucie aplikacji gdzieś z boku, ma się wyświetlać zawsze, bez względu na to, jaki kontroler zostanie uruchomiony.
Bo na chwilę obecną działa to jedynie wtedy, gdy do każdego kontrolera aplikacji dopiszę definicję obiektu. Czy tylko tak to zadziała?

Na forum pragprog.com padły podobne pytania, obrazujące problem z którym się spotykam, niestety bez odpowiedzi:
http://fora.pragprog.com/forums/148/topics/10857
http://fora.pragprog.com/forums/148/topics/10830

Wolałbym rozwiązanie problem w ujęciu drugim, bo bardzo chętnie powstawiałbym tam sobie parę innych metod czy zmiennych lokalnych dla modelu.

A być może istnieje trzeci sposób?

kolega w innym temacie zadał podobne pytanie :slight_smile: - potrzebne Ci coś w stylu komponentów. świetnie nadaje się do tego cells i apotomo. zobacz mój post w innym temacie http://rubyonrails.pl/forum/p36084-Wczoraj-22%3A32%3A49#p36084

Ok, ale czy to oznacza to co napisałem, że “partiale” nie są aż tak “sophisticated” i bez dopisywania definicji obiektu dla wszystkich kontrolerów aplikacji nie obsłużą tego?
Wyobrażałem to sobie tak, że skoro wywołuję w layoucie partial “widokmojegomodelu/index” to definicja tego index’u uwzględnia automatycznie kontrolery z “mojegomodelu”.

To może zadam trochę inne pytanie.
Mam środowisko wieloużytkownikowe, model “post” i zdefiniowany w kontrolerze @licznik, który zlicza ilość postów dla danego użytkownika.
Czy da się wyciągnąć ten @licznik jako partial bez grzebania po innych kontrolerach - chodzi o wyświetlenie tego @licznika gdzieś z boku, żeby użytkownik widział go po zalogowaniu w każdym momencie, aż do momentu wylogowania. Bo jeśli muszę do każdego kontrolera aplikacji podawać definicję tego @licznika to tak jakoś trochę … dziwnie.

no możesz zdefiniować sobie helper

module PostHelper def post_count n = current_user.posts.count content_tag :div, n end end
ale dla mnie pobieranie jakichś rzeczy w helperze to nie jest odpowiednia droga - lepiej załatwić to przed dekorator/prezenter albo właśnie takie komponenty jak cells

[code=ruby]class PostCountCell < Cell::Base
def display
@count = current_user.posts.count
render
end
end

/app/cells/post_count/display.html.erb

<%= @count %>

/app/views/layouts/application.html.erb

<%= render_cell :post_count, :display %>[/code]
po prostu składasz stronę z różnych niezależnych od siebie “klocków” :wink:

Nie przyglądałem się jeszcze dokładnie cellsom i apotamo, ale z tego kodu co podałeś to właśnie o coś takiego mi chodzi.
Kurczaki, to powinno być zaimplementowane w Railsach w core :slight_smile:
Coś na zasadzie globalnego kontrolera aplikacji, gdzie by właśnie się definiowało takie potrzebne kwiatki do kożucha.

Dzięki za pomoc, chociaż nie ukrywam, że odczucia mam ambiwalentne - sądziłem, że Railsy są trochę bardziej zaawansowane i nie trzeba się chwytać lewą ręką za prawe ucho. :wink:

To jeszcze jeśli mogę prosić o rade, oszczędź mi losu osiołka co mu w żłob dano - cellsy czy apotamo? Apotamo to cellsy wzbogacone o javascript?

jedno i drugie :wink: każde jest trochę do czego innego i zazwyczaj w projekcie mam oba.

cells jest dobre do rzeczy w miarę statycznych - pobierz i wyświetl. czyli jakieś najnowsze artykuły, najnowsze komentarze itp.
apotomo jest do rzeczy bardziej dynamicznych - formularze wysyłane w tle, jakieś rzeczy drap&drop

apotomo wymaga wpięcia się w konkretne kontolery żeby mogło działać w ich akcjach. to zawsze trochę więcej kodu, który czasami po prostu jest niepotrzebny bo wystarczy użyć cells