Pass variabel menjadi parsial, rails 3?

140

Saya memiliki loop seperti ini:

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

Lalu di parsial tengah saya, bagaimana cara mengakses pos saat ini?

Elliot
sumber
Halo Elliot. Saya menggunakan ini pada scaffolded standar. Menggunakan inside index.html.erb untuk merender _show.html.erb di mana show parsial berisi modal. semuanya bekerja dengan baik kecuali bahwa ketika saya menekan taut acara, itu menunjukkan id yang sama dan bukan menunjukkan id yang berbeda.
pelajar

Jawaban:

237

Coba ini:

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

Seperti ini, Anda akan memiliki variabel lokal yang posttersedia di sebagian.

Polarblau
sumber
18
Anda membutuhkan <% =%> bukan <%%> tag atau yang tidak akan ditampilkan
Ryan
4
Perlu diingat, Anda akan membutuhkan <%= render 'middle', :post => post %>rel 3.1.x
Archonic
124

Berikan ke parsial sebagai variabel lokal

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

Tentu saja, rel juga memiliki pintasan untuk merender koleksi:

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

Dalam hal ini ia akan memanggil posting parsial untuk setiap posting dengan variabel lokal 'posting'

Anda bahkan dapat merender template spacer di antara setiap posting:

<%= render :partial => 'post', :collection => @posts, :spacer_template => 'post_divider' %>
Stefaan Colman
sumber
14
Tidak tahu tentang opsi: spacer_template, sangat bagus. Terima kasih!
Claudio Acciaresi
11
Perhatikan bahwa: hash lokal tidak diperlukan saat menggunakan Rails 3. Argumen hash dikonversi menjadi argumen yang diteruskan ke parsial.
superluminary
4
Saya masih membutuhkan: hash lokal untuk berfungsi .. Saya menjalankan 3.2.12
mck
1
<%= render :partial => 'post', :collection => @posts, as: :post %>akan secara otomatis melalui masing-masing postparsial Anda, sehingga Anda dapat menggunakan postparsial Anda sebagai variabel.
ahnbizcad
14
<% @posts.each do |post| %>
  <% render middle, :post => post %>
<% end %>

Anda sekarang dapat mengakses pos sebagai variabel lokal postdi parsial

Felix Andersen
sumber
10

Ganti <%= render middle %>dengan <%= render middle, :post => post %>. Kemudian di middleparsial Anda, Anda dapat mengakses postvariabel.

sevenseacat
sumber