2013-04-26 11 views
95

Podążam za tutorialem Ruby on Rails i napotkałem problem podczas próby przekazania zmiennych do części.Szyny 4 - przekazywanie zmiennej do częściowej

Moja _user częściowy jest następujący

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

Chciałbym przekazać w szeregu dla wartości wielkości. Próbuję bez szczęścia w następujący sposób.

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

Z góry dziękuję!

Odpowiedz

133

Trzeba pełnego renderowania składni częściową jeśli przechodzą mieszkańców

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

Staje

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

Albo korzystać z nowego skrótu składni

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

co moim zdaniem jest dużo bardziej czytelny

+0

Dzięki @jamesw, Ale obrazy są jeszcze rozmiar 52. Czy dlatego Mam rozmiar ustawiony na 52 wyraźnie w częściowym? – dopplesoldner

+1

Tak, faktycznie, zastępujesz poprzednią wartość rozmiaru. –

+1

Będę też działał bez atrybutu 'collection' – ImranNaqvi

146

Od API Rails na PartialRender:

Rendering domyślny przypadek

Jeśli nie zamierzasz używać żadnej z opcji, takich jak zbiorów lub układów, można również użyć krótkiej ręki domyślne ustawienia renderowania w celu renderowania części.

Przykłady:

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

Tak, można użyć przekazać zmienną lokalną size uczynić w następujący sposób:

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

a następnie używać go w _user.html.erb częściowy:

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

Pamiętaj, że size: size jest odpowiednikiem :size => size.

+12

Drugi rendering, ten bez lokalnych uratowało mi życie. Dzięki – cassioscabral

2

Jeśli używasz JavaScript, aby uczynić następnie użyć escape_JavaScript("<%=render partial: partial_name, locals=>{@newval=>@oldval}%>");

0

Składniowo trochę inna, ale wygląda czystsze moim zdaniem:

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