it-swarm.com.de

Rails 4 - Variable an Teil übergeben

Ich folge dem Ruby on Rails= on ==== (Rails $ ====) Tutorial und bin auf ein Problem gestoßen, als ich versucht habe, Variablen an Partials zu übergeben.

Mein _user partiell ist wie folgt

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

Ich möchte eine Zahl für den Größenwert übergeben. Ich versuche folgendes ohne Glück.

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

Danke im Voraus!

112
dopplesoldner

Sie benötigen die vollständige Render-Teilsyntax, wenn Sie Einheimische übergeben

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

Wird

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

Oder verwenden Sie die neue Hash-Syntax

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

Was ich für viel lesbarer halte

149
jamesc

Aus der Rails api on PartialRender :

Rendern des Standardfalls

Wenn Sie keine der Optionen wie Sammlungen oder Layouts verwenden, können Sie zum Rendern von Teilbereichen auch die Standardwerte für das Rendern verwenden.

Beispiele:

# 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 %>

Sie können also eine lokale Variable size übergeben, um wie folgt zu rendern:

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

und benutze es dann im _user.html.erb teilweise:

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

Beachten Sie, dass size: size ist äquivalent zu :size => size.

168
Karim Sonbol

Entweder

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

Oder

render 'user', size: 30

Um locals zu verwenden, benötigen Sie partial. Ohne das Argument partial können Sie Variablen nur direkt auflisten (nicht innerhalb von locals)

5
Mirror318

Wenn Sie JavaScript zum Rendern verwenden, verwenden Sie escape_JavaScript("<%=render partial: partial_name, locals=>{@newval=>@oldval}%>");

3
Apoorv

Verwenden Sie locals nicht in Rails 4.2+

In Rails 4.2 musste ich den Teil locals entfernen und nur size: 30 stattdessen. Andernfalls würde die lokale Variable nicht korrekt übergeben.

Verwenden Sie zum Beispiel Folgendes:

<%= render @users, size: 30 %>
3
Joshua Pinter

Syntaktisch ein bisschen anders, aber meiner Meinung nach sieht es sauberer aus:

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" }
1
Alexander Luna