Jak przekazać parametr do partiala?

Załóżmy, że chciałbym mieć jakieś wyrażenie warunkowe wewnątrz partiala, które zależałoby od parametru przekazywanego do niego z zewnątrze ale nie poprzez object, jak to zrobić?

Wyjaśnienie:

Wywołanie:

  <%= render :partial => 'transfer' , :object=> e, :show_id = true %>

Wewnątrz partiala:

<% if @show_id # czy coś podobnego... %> cos_tam cos_tam <% end %>
Oczywiście mogę to zrobić tak, że wywołam object => { :real_object => e, :show_id = true } i dogrzebię się do tego od środka partiala, ale wolałbym jakoś zgrabniej :-).

  1. Można utworzyć zmienne lokalne w partialu (zalecane):
<%= render :partial => 'transaction', :locals => { :real_object => e, :show_id => true } %>
  1. Partial ma dostęp do atrybutów kontrolera @nazwa.

Tylko to ja poza partialem wiem, czy chcę coś pokazać, czy nie w zależności od tego co użytkownik wybrał :slight_smile:

Czasem najprostsze rzeczy są najtrudniejsze. Dzięki za pomoc.

No tak, więc najlepiej użyć locals. W render mówisz “co”, a wewnątrz partiala pojawi się to jako zmienne lokalne. Tak jakbyś wywoływał funkcję.

Drugi sposób jest brzydki - komunikacja przez przestrzeń globalną.

Ok, już rozumiem. Za szybko spojrzałem i myślałem, że ten kod w pierwszym punkcie twojej poprzedniej odpowiedzi jest moim cytatem i nie zwróciłem na niego w ogóle uwagi, przez co źle zrozumiałem cały punkt. Moja wina, ale już wszystko jasne. Nie widziałem tych locales w żadnej książce, którą czytałem, skąd je znasz?

Czy locales używa się jakby obok zmiennej object, czy w zastępstwie?

Z dokumentacji.

Używam locals gdy chcę przekazać więcej niż jedną zmienną. Jest jeszcze :collection, gdy przekazuje się kolekcję. Wtedy partial jest automatycznie powtarzany dla każdego elementu.

:collection znałem, szkoda tylko, że nie radzi sobie z tablicami haszy.

Raz jeszcze dzięki.