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?


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.


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' %>

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


10

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.