134 votes

Rails 4 - passer une variable à un partiel

Je suis le tutoriel Ruby on Rails et j'ai rencontré un problème en essayant de passer des variables aux partiels.

Mon _user partielle est la suivante

<li>
  <%= gravatar_for user, size: 52 %>
  <%= link_to user.name, user %>
</li>

Je voudrais passer dans un nombre pour la valeur de la taille. J'essaie de procéder comme suit, mais sans succès.

<%= render @users, :locals => {:size => 30} %>

183voto

Karim Sonbol Points 2422

Depuis l'api Rails sur PartialRender :

Rendu du cas par défaut

Si vous n'avez pas l'intention d'utiliser l'une des options telles que les collections ou les mises en page, vous pouvez également utiliser les valeurs par défaut de rendu pour rendre les partiels.

Exemples :

# Instead of <%= render partial: "account" %>
<%= render "account" %>

# Instead of <%= render partial: "account", locals: { account: @buyer } %>
<%= render "account", account: @buyer %>

# @account.to_partial_path returns 'accounts/account', so it can be used to replace:
# <%= render partial: "accounts/account", locals: { account: @account} %>
<%= render @account %>

# @posts is an array of Post instances, so every post record returns 'posts/post' on `to_partial_path`,
# that's why we can replace:
# <%= render partial: "posts/post", collection: @posts %>
<%= render @posts %>

Ainsi, vous pouvez utiliser une variable locale size à rendre comme suit :

<%= render @users, size: 50 %>

et l'utiliser ensuite dans le _user.html.erb partiel :

<li>
    <%= gravatar_for user, size: size %>
    <%= link_to user.name, user %>
</li>

Notez que size: size est équivalent à :size => size .

180voto

jamesw Points 4235

Vous avez besoin de la syntaxe complète de rendu partiel si vous passez des locaux

<%= render @users, :locals => {:size => 30} %>

Devient

<%= render :partial => 'users', :collection => @users, :locals => {:size => 30} %>

Ou pour utiliser la nouvelle syntaxe de hachage

<%= render partial: 'users', collection: @users, locals: {size: 30} %>

Ce qui, je pense, est beaucoup plus lisible

8voto

Mirror318 Points 307

Soit

render partial: 'user', locals: {size: 30}

Ou

render 'user', size: 30

Pour utiliser locals vous avez besoin partial . Sans le partial vous pouvez simplement lister les variables directement (pas dans l'argument locals )

5voto

Josh Pinter Points 3814

N'utilisez pas locals dans Rails 4.2+.

Dans Rails 4.2, j'ai dû supprimer l'option locals et utiliser simplement size: 30 à la place. Sinon, la variable locale ne serait pas transmise correctement.

Par exemple, utilisez ceci :

<%= render @users, size: 30 %>

2voto

Apoorv Points 454

Si vous utilisez JavaScript pour effectuer le rendu, utilisez alors escape_JavaScript("<%=render partial: partial_name, locals=>{@newval=>@oldval}%>");

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X