Przekaż zmienną do części, szyny 3?

140

Mam taką pętlę:

<% @posts.each do |post| %>
  <% render middle %>
<% end %>

Następnie w środkowej części, jak uzyskać dostęp do bieżącego postu?

Elliot
źródło
Cześć Elliot, używam tego na standardowym rusztowaniu. Użycie inside index.html.erb do renderowania _show.html.erb, gdzie show parts zawiera modalne. wszystko działa dobrze, z wyjątkiem tego, że kiedy naciskam link pokaż, pokazuje ten sam identyfikator zamiast różnych identyfikatorów.
uczeń

Odpowiedzi:

237

Spróbuj tego:

<% @posts.each do |post| %>
  <%= render 'middle', :post => post %>
<% end %>

W ten sposób będziesz mieć lokalną zmienną postdostępną w części.

polarblau
źródło
18
potrzebujesz tagów <% =%> nie <%%>, bo inaczej nie będzie renderowany
Ryan,
4
Pamiętaj, że potrzebujesz <%= render 'middle', :post => post %>szyn 3.1.x
Archonic,
124

Daj to częściowej jako zmienną lokalną

<%= render :partial => 'middle', :locals => { :post => post } %>

Oczywiście rails ma również skrót do renderowania kolekcji:

<%= render :partial => 'post', :collection => @posts %>

W tym przypadku wywoła częściowy post dla każdego posta z lokalną zmienną „post”

Możesz nawet renderować szablon odstępnika między poszczególnymi postami:

<%= render :partial => 'post', :collection => @posts, :spacer_template => 'post_divider' %>
Stefaan Colman
źródło
14
Nie wiedziałem o opcji: spacer_template, naprawdę fajnie. Dzięki!
Claudio Acciaresi
11
Zauważ, że hash: locals nie jest potrzebny, gdy używasz Rails 3. Hash argumentów jest konwertowane na argumenty, które są przekazywane do częściowej.
superluminarium
4
Nadal potrzebowałem: lokalny hash, aby to działało. Uruchamiam 3.2.12
mck
1
<%= render :partial => 'post', :collection => @posts, as: :post %>automatycznie przejdzie przez każdy postz twoich podrzędnych, więc możesz użyć ich postjako zmiennej.
ahnbizcad
14
<% @posts.each do |post| %>
  <% render middle, :post => post %>
<% end %>

Możesz teraz uzyskać dostęp do wpisu jako zmiennej lokalnej postw części

Felix Andersen
źródło
10

Wymień <%= render middle %>się <%= render middle, :post => post %>. Następnie w middleczęści możesz uzyskać dostęp do postzmiennej.

sevenseacat
źródło