Je suis le tutoriel Ruby on Rails et j'ai rencontré un problème en essayant de passer des variables à des partiels.
Mon _user
partiel est le suivant
<li>
<%= gravatar_for user, size: 52 %>
<%= link_to user.name, user %>
</li>
Je voudrais passer un nombre pour la valeur de la taille. J'essaie comme suit sans aucune chance.
<%= render @users, :locals => {:size => 30} %>
Merci d'avance!
Vous avez besoin de la syntaxe partielle de rendu complet si vous passez des sections locales
<%= render @users, :locals => {:size => 30} %>
Devient
<%= render :partial => 'users', :collection => @users, :locals => {:size => 30} %>
Ou utiliser la nouvelle syntaxe de hachage
<%= render partial: 'users', collection: @users, locals: {size: 30} %>
Ce que je pense est beaucoup plus lisible
Depuis le Rails api on PartialRender :
Rendu le cas par défaut
Si vous n'utilisez aucune des options telles que les collections ou les mises en page, vous pouvez également utiliser les valeurs par défaut abrégées 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 %>
Donc, vous pouvez utiliser pass une variable locale size
pour le rendu comme suit:
<%= render @users, size: 50 %>
puis utilisez-le dans le partiel _user.html.erb
:
<li>
<%= gravatar_for user, size: size %>
<%= link_to user.name, user %>
</li>
Notez que size: size
est équivalent à :size => size
.
Soit
render partial: 'user', locals: {size: 30}
Ou
render 'user', size: 30
Pour utiliser locals
, vous avez besoin de partial
. Sans l'argument partial
, vous pouvez simplement lister les variables directement (pas dans locals
)
Si vous utilisez JavaScript pour le rendu, utilisez escape_JavaScript("<%=render partial: partial_name, locals=>{@newval=>@oldval}%>");
locals
dans Rails 4.2+Dans Rails 4.2, je devais supprimer la partie locals
et simplement utiliser size: 30
à la place. Sinon, la variable locale ne serait pas transmise correctement.
Par exemple, utilisez ceci:
<%= render @users, size: 30 %>
C'est un peu différent du point de vue syntaxique, mais à mon avis, il semble plus propre.
render 'my_partial', locals: { title: "My awesome title" }
# not a big fan of the arrow key syntax
render 'my_partial', :locals => { :title => "My awesome title" }