Passar uma variável para uma parcial, trilhos 3?


140

Eu tenho um loop como este:

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

Então, no meu meio parcial, como faço para acessar a postagem atual?


Olá Elliot, estou usando isso no andaime padrão. Usando dentro de index.html.erb para renderizar _show.html.erb em que show parcial contém modal. tudo está funcionando bem, exceto que quando eu pressiono o link show, ele mostra o mesmo ID em vez de mostrar IDs diferentes.
aluno

Respostas:


237

Tente o seguinte:

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

Assim, você terá uma variável local postdisponível na parcial.


18
Você precisa <% =%> não <%%> marcas ou então não irá processar
Ryan

4
Lembre-se de que você precisaria <%= render 'middle', :post => post %>dos trilhos 3.1.x
Archonic

124

Dê para o parcial como uma variável local

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

Obviamente, o Rails também possui um atalho para renderizar coleções:

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

Nesse caso, ele chamará a postagem parcial para cada postagem com a variável local 'post'

Você pode até renderizar um modelo espaçador entre cada postagem:

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

14
Não sabia sobre a opção: spacer_template, muito legal. Obrigado!
Claudio Acciaresi

11
Observe que o hash: locals não é necessário ao usar o Rails 3. O hash de argumentos é convertido em argumentos passados ​​para o parcial.
superluminary

4
Eu ainda precisava: hash local para que funcionasse .. Estou executando o 3.2.12
mck 21/03

1
<%= render :partial => 'post', :collection => @posts, as: :post %>irá percorrer automaticamente cada um postna sua parcial, para que você possa usá-la postcomo variável.
ahnbizcad

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

Agora você pode acessar a postagem como a variável local postna parcial


10

Substitua <%= render middle %>por <%= render middle, :post => post %>. Então, no seu middleparcial, você pode acessar a postvariável.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.