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.