2013-04-26 14 views
95

Seguo il tutorial di Ruby on Rails e ho riscontrato un problema durante il tentativo di passare le variabili ai partial.Rails 4 - passaggio variabile a parziale

mio _user parziale è del seguente

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

desidero passare in un numero per il valore di dimensione. Sto cercando come segue senza fortuna.

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

Grazie in anticipo!

risposta

133

è necessario il pieno di rendering della sintassi parziale se si sta passando i locali

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

Diventa

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

o per utilizzare la nuova sintassi hash

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

Che credo sia molto più leggibile

+0

Grazie @jamesw, ma le immagini sono ancora dimensioni 52. Sarà perché Ho la dimensione impostata su 52 esplicitamente nel parziale? – dopplesoldner

+1

Sì, in realtà stai ignorando il valore precedente della dimensione. –

+1

lavorerò anche senza attributo 'collection' – ImranNaqvi

146

dalle API Rails su PartialRender:

rendering caso di default

Se non avete intenzione di utilizzare una qualsiasi delle opzioni come collezioni o layout, è anche possibile utilizzare la breve mano valori predefiniti di render per rendere parziali.

Esempi:

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

Quindi, è possibile utilizzare passare una variabile locale size di rendere nel modo seguente:

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

e poi utilizzarlo nel _user.html.erb parziale:

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

Si noti che size: size equivale a :size => size.

+12

Il secondo render, quello senza abitanti , salvato la mia vita. Grazie – cassioscabral

2

Se si utilizza JavaScript per il rendering quindi utilizzare escape_JavaScript("<%=render partial: partial_name, locals=>{@newval=>@oldval}%>");

0

Sintatticamente un po 'diverso ma sembra più pulito, a mio parere:

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