2011-07-12 140 views
59

我有一個視圖,顯示多個圖像和這些圖像的相關標籤。我決定對每個圖像及其標籤使用局部視圖,但我無法將圖像對象傳入局部視圖。這裏是主視圖中的相關代碼:將參數傳遞到局部視圖

<table> 
    <% @images.each do |i| %> 
    <tr> 
     <%= render :partial => :image_tag, :image => i %> 
    </tr> 
    <% end %> 
</table> 

下面是部分視圖的相關代碼(局部視圖名爲_image_tag.html.erb):

<table> 
    <%= image.id %> 
    <%= image_tag image.src %> 
</table> 

this線程讀取,我可以通過在圖像對象中,我正在執行它的方式。我嘗試通過渲染方法上的選項散列傳遞id,並且也沒有工作。我得到的錯誤是:

undefined method `model_name' for Symbol:Class 

以我要求的線爲中心渲染:局部在主視圖中。

回答

88
<%= render partial: "image_tag", locals: {image: i} %> 

是你如何將變量傳遞給partials。

+0

我實際上已經有了,並且正在得到與我目前相同的錯誤。還有其他問題導致了這個問題? – jnevelson

+0

我的猜測是「image_tag」是一個軌道輔助方法,並與您的部分名稱相沖突。你嘗試重命名你的部分? –

+0

考慮到上下文的公平點,但我只在問題中加入'圖像'以保持簡單。我的實際代碼命名不同,所以這不是問題。 – jnevelson

10

您也可以將整個對象傳遞給一個部分是這樣的:

<%= render :partial => "partialpath", :object => :image %> 

你會在你的情況下,圖像和局部的路徑來代替我不管你的部分被調用。在部分內部,它可以訪問與局部名稱相同名稱的本地變量。所以如果你的部分名稱是「圖像」,局部變量圖像將是你傳入的對象。

編輯:看軌道指南看起來像在軌道3:對象現在作爲實例變量而不是局部so @image就是你在局部使用的。

+2

我不認爲你的'編輯:'是正確的。 [Quoting](http://guides.rubyonrails.org/layouts_and_rendering.html#passing-local-variables):*在以前的Rails版本中,默認的局部變量會查找與局部變量同名的實例變量父母。 *在你的回答中,作爲':object'傳遞的對象的值將在部分內部被訪問,作爲局部變量'partialpath'(而不是'@ partialpath' ,'@ image'或'image') – Zabba

+0

我同意@Zabba – amulous

53

對於那些可能無法將值發送給部分的人來說,還有其他要考慮的問題。 如果省略「部分:」你的部分路徑,像這樣......前:

<%= render 'my_partial', :locals => {:greeting => 'Hello world', :x => 36} %> 

...看來你將無法直接訪問當地人的哈希值。相反,你需要做到以下幾點:

<div> 
    <h1> <%= locals[:greeting] %> , my x value is <%= locals[:x] %> </h1> 
</div> 

然而,包括 '部分:'你的部分路徑之前,類似如下...:

<%= render partial: 'my_partial', :locals => {:greeting => 'Hello world', :x => 36} %> 

...讓你直接訪問散列值,就像這樣:

<div> 
    <h1> <%= greeting %> , my x value is <%= x %> </h1> 
</div> 

只是要考慮的事情,我是越來越受到這個問題的嘗試訪問,當地人哈希時絆倒值,並意識到我已經省略了'部分:'組件。

+0

你救了我。謝謝! – hbobenicio

+1

pithier rails 4語法'<%= render partial:'my_partial',locals:{greeting:'Hello world',x:36}%>' – Jerome