2011-02-25 67 views
54
<%= render :partial => 'partial/path', :locals => {:xyz => 'abc'} %> 

VS渲染部分:對象VS:當地人

<%= render :partial => 'partial/path', :object => @some_object %> 

我第一個想到的使部分和第二個使在部分可用一個局部對象變量命名可用一個局部變量名爲XYZ的。那麼區別是什麼呢? (除了當地人允許多於變量)

回答

30

在第二種情況下,使用:object將默認定義一個與部分名稱相同的變量。如果我的部分模板名爲_user.html.erb,那麼模板中會定義一個名爲「user」的本地變量。

您可以指定一個不同的變量名稱:as =>「another_name」。

這是記錄在這裏: http://api.rubyonrails.org/classes/ActionView/PartialRenderer.html,在這裏:http://apidock.com/rails/ActionView/PartialRenderer

...和老年人的Rails(版本< = V3.09): http://apidock.com/rails/ActionView/Partials

+3

文檔搬到這裏: [http://api.rubyonrails.org/類/ ActionView/PartialRenderer.html](http://api.rubyonrails.org/classes/ActionView/PartialRenderer.html) – kimos 2013-03-13 17:37:15

48

第二種形式

render :partial => 'account', :object => @some_account 

將確保部分中的account變量將被設置爲@some_account。 您可以使用:as選項重命名變量。

:locals的最大優點是,

  • 你有過的對象和名字非常明確控制
  • 您可以指定1個多變量

所以,你可以這樣做

render partial => 'some_view', :locals => { :user => account.user, :details => some_details_we_retrieved } 

作出明確的分離位置需要時可以使用。

:locals方法的缺點是,它是更冗長,有時一個簡單的

render :partial => 'account' 

是相同的

render :partial => 'account', :locals => {:account => @account } 

所以使用哪個適合你的最好的一個(或其中它適合最好的)。

+0

我有一個例子,我可以通過對象在我的部分訪問:對象變量的名稱..這很奇怪。 – 2011-02-25 21:20:51

+0

如果'@ account'爲零,':object => @ account'將不會使部分帳戶可用;你會得到一個錯誤,試圖做這樣的事情:'如果帳戶<做某事>'。如果您不確定是否已定義@account,請使用':locals => {:account => @ account}' – 2015-03-05 19:50:28

13

如果你使用Rails 3+,有一種更簡單的使用語法:

# Instead of <%= render partial: "account", locals: { account: @buyer } %> 
<%= render 'account', account: @buyer %> 

來源:Action View Partials

+3

如果您要從控制器呈現部分內容,則此簡寫形式**將會不行**。 – 2014-12-08 19:25:09