Renderowanie partial w kazdym miejscu

Hmm nie wiem jak to najłatwiej opisać , bo problem jest pewnie dość prozaiczny, a mianowicie:

Mam jakas aplikacje i chce by w bocznym div zawsze byl wyswietlany jakis kod, dokładnie rzecz biorąc lista wszystkich dat w ktorych był jakiś wpis dodawany. kod do kontrolera to dajmy na to:

@archs = Post.find(:all, :order => ‘created_at’)
@arch_months = @archs.group_by { |t| t.created_at.beginning_of_month }

no i w layout/application…

mam :

<%= render :partial => @archs %>

a w archs/index.html.erb

<% @arch_months.sort.each do |month, archs| %>
<% for arch in archs %>

  • <%= arch.created_at.to_date.to_s(:long) %>

  • <% end %>
    <% end %>

    Tylko to rozwiazanie dziala jak sie odwoluje do konkretnego linku powiedzmy

    /archs

    ale z
    /posts i innych juz nic nie pokarze

    rozwiazanie jakie mi sie nasuwa to dac to do applicationcontroller, tylko jak sie wtedy do tego odwolywac i czy dobrze o tym mysle?

    http://pastie.org/357801 Jest to przyklad troszeczke inny :wink: ty chcesz aby wszystko bylo autoamtycznie a tam pokazuje jak to zrobc to w ustadardyzowanych partialach _sidebar.rhtml w kazdym katalogu kontrolera.

    Ogolnie w pliku layoutu mozesz jeszcze zrobic jeden duzy case (jako helper najlepiej)
    http://pastie.org/357803

    O coś takiego myśle że chodziło, zaraz zobacze ;] dzięki ;]

    pewnie to nadwyraz proste ;] ale moze ktos poczatkujacy skorzysta wiec załączam to co mi wyszlo :

    ApplicationHelper

    def render_archs
    @archs = Post.find(:all, :order => ‘created_at’)
    @arch_months = @archs.group_by { |t| t.created_at.beginning_of_month }

    html = render :partial => @arch_months
    html
    

    end

    layout :
    <%= render_archs %>

    _array.html.erb :

    <% @arch_months.sort.each do |month, archs| %>

  • <%= month.strftime('%B, %Y') %> <% @i = 0 %> <% for arch in archs %> <% @i += 1 %> <% end %> (<%= @i %>)
  • <% end %>

    Tylko masz jeden maly blad.

    To powinno sie znalesc w kontrolerze:

        @archs = Post.find(:all, :order => 'created_at')

    Natomaist jelsi nie uzywasz @archs_months nigdzie indziej to powiniens miec tylko

    if @archs render :partial => @archs.group_by { |t| t.created_at.beginning_of_month } end

    kiedy działa tak jak jest :stuck_out_tongue:

    o kontrolerze myslalem ale by byl widoczny wszedzie to musial by byc to application controller, no ale tam musial byc utworzyc jakas definicje tylko jaka i jak do niej sie odwolac, czy to ma byc cos takiego

    def archs
    @archs = Post.find(:all, :order => ‘created_at’)
    end

    no i jeszcze musze wymyslic jak z tego link zrobic by pokazywalo po kliknieci te artykuly napisane w tym miesiacu

    cos pewnie na wzor
    link_to_unless_current (‘ta data np (January 2009 (2)’ , ’ no i cos z kontrolera @archs_s’ ???

    i pewnie w kontrolerze

    def arch_s
    a = Post.find(:all, :where => created_at.year LIKE %Y and created_at.month LIke %M
    end

    A, no to kolega potrzebuje czegoś, co w Railsach <2.0 było dostępne jako komponenty, a teraz można zrobić za pomocą Rails Cells:
    http://cells.rubyforge.org/

    hmm no wlasnie o cos takiego chodzilo, ale widze ze samemu tez to da rade napisac, wiec spoko, co do linkow to mysle ze stary php zwyczaj nie bedzie taki zly?

    link_to … ‘AAA’, ‘/arch_s?y=aaa&m=bbb’

    tylko jak sie w railsach do tablicy $_GET dobrac?

    Uhh… nie mam wyjscia, z taka argumentacja nie wygram :wink:

    A tak na seiro to nie chodzi o to czy dziala czy nie :wink: tylko jak jest Rails Ways ? Im mniej wymagasz od siebie tym gorzej twoja aplikacja bedzie wygladala na samym koncu, i tym mniej bedziesz chcial przy niej pracowac :wink:

    [quote=gotar]hmm no wlasnie o cos takiego chodzilo, ale widze ze samemu tez to da rade napisac, wiec spoko, co do linkow to mysle ze stary php zwyczaj nie bedzie taki zly?

    link_to … ‘AAA’, ‘/arch_s?y=aaa&m=bbb’

    tylko jak sie w railsach do tablicy $_GET dobrac?[/quote]
    Masz params[]

    no wiec linki mam, wygladaja tak:
    <% @arch_months.sort.each do |month, archs| %>

  • <%= link_to month.strftime('%B, %Y'), "/?y=#{month.strftime("%Y")}&m=#{month.strftime("%m")}" %> <% @i = 0 %> <% for arch in archs %> <% @i += 1 %> <% end %> (<%= @i %>)
  • <% end %>

    a to mam w kontrolerze:
    if params[:y] && params[:m]
    @posts = Post.find(:all, :conditions => [‘extract(year from created_at) LIKE ? AND extract(month from created_at) LIKE ?’, params[:y], params[:m]] )
    else
    @posts = Post.find(:all)
    end

    i niby ok ale w konsoli pojawia sie w zapytaniu jakies dziwne E, przy like:

    SELECT * FROM “posts” WHERE (extract(year from created_at) LIKE E’2009’ AND extract(month from created_at) LIKE E’01’)

    jak pozbyc sie tego E? bo chyba to psuje zapytanie?

    Tak się robi linki z ekstra parametrami (tj. z końcówką typu ?y=Y&m=M)
    <%= link_to month.strftime(’%B, %Y’), {:y => month.strftime("%Y"), m => month.strftime("%m")} %>

    PS. Tak jak PaK napisał, straszne jest to co Ty robisz i zupełnie niezgodne z filozofią i idiomatyką Rails…

    no wiem ze tak sie robi link standardowe przekazywanie przez tablice $_GET parametru m i y
    i to dziala swienie linki sa ok, tylko ze w kontrolerze jest cos nie tak nie wiem czemu do kodu sql dodaje w :conditions dodatkowo “E” po LIKE

    no jestes tego dosc swiadom :stuck_out_tongue: kilka lat piszac spagetti php i ciezko teraz to jakos rozgraniczyc na mvc, brakuje wiedzy i ideologii odpowiedniej

    ps na forum ruby-forum.com napisali mi by nie uzywac link_to tylko url_for?

    ktos moze mi wyjasnic czemu? do tego jak tego uzywc zamiast?, bo jak widze ma to skladnie taka mniej wiecej:

    url_for :controller => ‘aaa’, :name => ‘bbb’, i tam moje :m => ‘01’, y: => ‘2009’

    ale gdzie w tym miejsce na to co sie pojawia na ekranie czyli na czesc miedzy ???

    To taki sposób cytowania.
    http://www.postgresql.org/docs/8.3/interactive/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS
    okolice końcówki rozdziału 4.1.1

    ;] ok dzieki zmienilem LIKE na = i działa, nie wiem czemu z LIKE nie szlo, mniejsza o to tak moze byc jak jest

    [quote=gotar]url_for :controller => ‘aaa’, :name => ‘bbb’, i tam moje :m => ‘01’, y: => ‘2009’

    ale gdzie w tym miejsce na to co sie pojawia na ekranie czyli na czesc miedzy ??? [/quote]
    Użyj :anchor=>“tekst pokazywany na ekranie”

    [quote=Tomash]A, no to kolega potrzebuje czegoś, co w Railsach <2.0 było dostępne jako komponenty, a teraz można zrobić za pomocą Rails Cells:
    http://cells.rubyforge.org/[/quote]
    Tomash: używałeś cells? Z tego co widzę to jest to coś w rodzaju Merb Parts, tylko bardziej “whackowane” w railsy. Parts dziedziczą po abstract_controller, więc można używać wszystkiego tego czego normalnie można używać w innych kontrolerach (layouty, renderowanie, filtry itp. itd.)

    Szkoda, że wcześniej tego nie znalazłem - mogłoby często sporo uprościć kod aplikacji.