2013-04-26 7 views
95

Ich befolge das Ruby on Rails-Tutorial und stieß auf ein Problem beim Versuch, Variablen an Partials zu übergeben.Rails 4 - Variable an Teil übergeben

Mein _user Teil ist als

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

folgt würde Ich mag in einer Reihe für den Größenwert zu übergeben. Ich versuche es wie folgt ohne Glück.

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

Vielen Dank im Voraus!

Antwort

133

Sie benötigen die volle Teil Syntax machen, wenn Sie Einheimische

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

Wird

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

Oder die neue Hash-Syntax

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

Was ich denke, viel zu verwenden ist besser lesbar

+0

Dank @jamesw, aber Bilder 52. Ist es immer noch groß sind, weil Ich habe die Größe explizit auf 52 im Teil festgelegt? – dopplesoldner

+1

Ja, tatsächlich überschreiben Sie den vorherigen Wert der Größe. –

+1

Ich werde auch ohne Attribut "collection" arbeiten – ImranNaqvi

146

von den Schienen api auf PartialRender:

den Fall Standard-Rendering

Wenn Sie keine der Optionen, wie Sammlungen oder Layouts einsetzen möchten, können Sie auch die Kurz Hand benutzen Standardeinstellungen von Render, um Teiltöne zu rendern.

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

So können Sie eine lokale Variable size zu machen passieren wie folgt verwenden:

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

und es dann im _user.html.erb Teil verwenden:

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

Beachten Sie, dass size: size entspricht :size => size.

+12

Der zweite Render, der ohne Locals rettete mein Leben. Vielen Dank – cassioscabral

2

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

0

syntaktisch ein wenig anders verwenden zu machen, aber es sieht sauberer meiner Meinung nach:

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" } 
Verwandte Themen