<%= render :partial => 'partial/path', :locals => {:xyz => 'abc'} %>
<%= render :partial => 'partial/path', :object => @some_object %>
我第一個想到的使部分和第二個使在部分可用一個局部對象變量命名可用一個局部變量名爲XYZ的。那麼區別是什麼呢? (除了當地人允許多於變量)
<%= render :partial => 'partial/path', :locals => {:xyz => 'abc'} %>
<%= render :partial => 'partial/path', :object => @some_object %>
我第一個想到的使部分和第二個使在部分可用一個局部對象變量命名可用一個局部變量名爲XYZ的。那麼區別是什麼呢? (除了當地人允許多於變量)
在第二種情況下,使用: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
第二種形式
render :partial => 'account', :object => @some_account
將確保部分中的account
變量將被設置爲@some_account
。 您可以使用:as
選項重命名變量。
的:locals
的最大優點是,
所以,你可以這樣做
render partial => 'some_view', :locals => { :user => account.user, :details => some_details_we_retrieved }
作出明確的分離位置需要時可以使用。
的:locals
方法的缺點是,它是更冗長,有時一個簡單的
render :partial => 'account'
是相同的
render :partial => 'account', :locals => {:account => @account }
所以使用哪個適合你的最好的一個(或其中它適合最好的)。
我有一個例子,我可以通過對象在我的部分訪問:對象變量的名稱..這很奇怪。 – 2011-02-25 21:20:51
如果'@ account'爲零,':object => @ account'將不會使部分帳戶可用;你會得到一個錯誤,試圖做這樣的事情:'如果帳戶<做某事>'。如果您不確定是否已定義@account,請使用':locals => {:account => @ account}' – 2015-03-05 19:50:28
如果你使用Rails 3+,有一種更簡單的使用語法:
# Instead of <%= render partial: "account", locals: { account: @buyer } %>
<%= render 'account', account: @buyer %>
如果您要從控制器呈現部分內容,則此簡寫形式**將會不行**。 – 2014-12-08 19:25:09
文檔搬到這裏: [http://api.rubyonrails.org/類/ ActionView/PartialRenderer.html](http://api.rubyonrails.org/classes/ActionView/PartialRenderer.html) – kimos 2013-03-13 17:37:15