Passer une variable dans un partiel, rails 3?

140

J'ai une boucle comme celle-ci:

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

Ensuite, dans mon partiel du milieu, comment accéder à la publication actuelle?

Elliot
la source
Bonjour Elliot, je l'utilise sur un échafaudage standard. Utilisation de l'intérieur de index.html.erb pour rendre _show.html.erb où show partial contient modal. tout fonctionne bien sauf que lorsque j'appuie sur le lien show, il affiche le même identifiant au lieu d'afficher des identifiants différents.
apprenant

Réponses:

237

Essaye ça:

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

Comme ça, vous aurez une variable locale postdisponible dans le partiel.

polarblau
la source
18
vous avez besoin de <% =%> pas de balises <%%> sinon il ne sera pas rendu
Ryan
4
Gardez à l'esprit que vous auriez besoin <%= render 'middle', :post => post %>de rails 3.1.x
Archonic
124

Donnez-le au partiel comme variable locale

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

Bien sûr, rails a également un raccourci pour le rendu des collections:

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

Dans ce cas, il appellera le post partiel pour chaque poste avec une variable locale 'post'

Vous pouvez même rendre un modèle d'espacement entre chaque article:

<%= render :partial => 'post', :collection => @posts, :spacer_template => 'post_divider' %>
Stefaan Colman
la source
14
Je ne connaissais pas l'option: spacer_template, vraiment sympa. Merci!
Claudio Acciaresi
11
Notez que le hachage: locals n'est pas nécessaire lors de l'utilisation de Rails 3. Le hachage des arguments est converti en arguments qui sont passés au partiel.
Superluminary
4
J'avais encore besoin: du hachage local pour que ça marche .. J'utilise 3.2.12
mck
1
<%= render :partial => 'post', :collection => @posts, as: :post %>bouclera automatiquement chacun postdans votre partiel, vous pouvez donc utiliser postdans votre partiel comme variable.
ahnbizcad le
14
<% @posts.each do |post| %>
  <% render middle, :post => post %>
<% end %>

Vous pouvez maintenant accéder à la publication en tant que variable locale postdans le partiel

Felix Andersen
la source
10

Remplacez <%= render middle %>par <%= render middle, :post => post %>. Ensuite, dans votre middlepartiel, vous pouvez accéder à la postvariable.

sevenseacat
la source