2013-04-26 185 views
95

我正在關注Ruby on Rails教程,並嘗試將變量傳遞給partials時遇到了問題。Rails 4 - 將變量傳遞給部分

_user部分是如下

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

我想在若干對大小值通過。我沒有任何運氣如下嘗試。

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

在此先感謝!

回答

133

您需要完整的渲染部分語法,如果你是路過的當地人

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

變爲

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

或者使用新的哈希語法

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

我認爲這是多大更具可讀性

+0

感謝@jamesw,但圖像還是大小52.是不是因爲我的部分尺寸設置爲52? – dopplesoldner 2013-04-26 18:06:29

+1

實際上,您正在覆蓋以前的尺寸值。 – 2013-04-26 21:46:20

+1

我也會在沒有'collection'屬性的情況下工作 – ImranNaqvi 2015-11-26 11:24:31

146

從Rails的API上PartialRender

再現默認情況下

如果你不打算使用任何像集合或佈局的選項,您還可以使用速記渲染部分的默認渲染。

例子:

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

所以,你可以使用通過局部變量size呈現如下:

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

,然後用它在_user.html.erb部分:

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

請注意, size: size相當於:size => size

+12

第二個渲染器,沒有locals , 救了我。謝謝 – cassioscabral 2014-06-05 17:05:24

2

如果您使用的JavaScript渲染,然後使用escape_JavaScript("<%=render partial: partial_name, locals=>{@newval=>@oldval}%>");

0

語法上稍有不同,但它看起來在我看來,更清潔:

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