Przekazanie zmiennej do partial + ograniczenie wyswietlania znakow

Hej,
Mam poniższy partial do wyswietlania postow (railscasts -> blog w 15 min)

[code]<% div_for post do %>

<%= link_to_unless_current h(post.tytul), post %>

<%= h(post.tresc) %>... <% end %>[/code] Chciałbym aby w widoku [b]index[/b] tresc postu wyswietlala sie w czesci, np 700 pierwszych znakow: post.tresc[0,700], w [b]show[/b] miałby się wyświetlać cały post. Mógłbym ten partial poprostu rozbić na 2 widoki, ale nie byloby to zgodne z DRY oraz podejrzewam, że da się jedna linijka to poprawic.

podpowiedzcie prosze

  • czy da sie przekazac przez render :partial to w jakis sposob
  • czy juz w samym partial dopisac

No index nie ma np ID a show ma więc np tak brzydko :stuck_out_tongue:

  • if params[:id]
    = post.tresc[0,700].join(’ ')
  • else
    = post.tresc[0,150].join(’ ')

coś takiego, no ale możesz sprawdzić jaka akcja jest wywołana, na pewno i w inne ładne sposoby.

Akcje sprawdzisz poprzez

controller.action_name == ‘show’

reszta jak wyżej

Po pierwsze: ten kod wygląda lekko archaicznie - nie pamiętam tego railscasta, ale domyślam się, że jest baardzo stary :wink:
Po drugie: jaką masz wersję railsów? Jeśli 3.x, nie musisz się bawić w escapowanie danych - jest to robione automatycznie.
Po trzecie: lepiej jest przechowywać w osobnych polach wstęp i rozwinięcie.

Można użyć dodatkowych partiali i przekazywać info co renderowac przez @zmienną lub :locals
Więcej do poczytania tutaj http://apidock.com/rails/ActionView/Partials
Sekcja “Rendering partials with layouts” wydaje się być warta uwagi.

Edit:
Oczywiście w jednym z partiali można użyć http://apidock.com/rails/ActionView/Helpers/TextHelper/truncate

http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#method-i-truncate ?

dzieki, tego mi brakowalo

krzyzak: nad przechowywaniem w osobnych polach pomysle, Railsy 2.3.8

RawOnRails, bkozal nie chodzilo o samo obciecie tekstu, oraz o rozbicie tego na 2 partiale, ale dzieki za wskazowki

Mozesz to zrobic w jednym partialu w ten sposob.

index

render :partial => '...', :locals => {:is_truncate => true}

show

render :partial => '...', :locals => {:is_truncate => false}

partial

[code]<% div_for post do %>

<%= link_to_unless_current h(post.tytul), post %>

<%= is_truncate ? truncate h(post.tresc), :length => 700 : h(post.tresc) %> <% end %>[/code] Jezeli bedziesz z tego korzystal w wielu miejscach, sprobuj napisac odpowiedni helper. :)

ok dzieki, sprobuje

to ja może rozwinę, dlaczego moim zdaniem kwestia obcinania jest zła.
Po pierwsze - dużo łatwiej wygląda konstrukcja typu @article.summary zamiast @article.body[0,700] (choć fakt - nic nie stoi na przeszkodzie, żeby dopisać taką metodę)
Po drugie- gdy obcinasz po 700 znakach, masz duże prawdopodobieństwo, że obetniesz jakieś słowo - a to nie wygląda ładnie
Po trzecie - masz całkiem duże prawdopodobieństwo tego, że będziesz miał niepoprawny html. Jeśli w artykule coś sobie potraktujesz iem, czy czymkolwiek innym, nie masz pewności, że zamknięcie tagu będzie w tych pierwszych 700 znakach.
Po czwarte - niektóre notki lepiej, jak mają krótszy wstęp, inne lepiej jak mają dłuższy - nie da się tego płynnie regulować w Twoim rozwiązaniu
Wszystkie te problemy znikają przy rozdzieleniu na dwa pola :wink:

[quote=krzyzak]Po drugie- gdy obcinasz po 700 znakach, masz duże prawdopodobieństwo, że obetniesz jakieś słowo - a to nie wygląda ładnie
Po trzecie - masz całkiem duże prawdopodobieństwo tego, że będziesz miał niepoprawny html. Jeśli w artykule coś sobie potraktujesz iem, czy czymkolwiek innym, nie masz pewności, że zamknięcie tagu będzie w tych pierwszych 700 znakach.[/quote]
Ale wiesz że helpery railsowe mają ten problem rozwiązany od, like, co najmniej trzech lat?

a wiesz że @article.body[0,700] nie jest helperem ? :wink: