2016-03-04 107 views
1

我試圖通過將多個嵌套元素轉換爲產生塊的部分來幹掉我的視圖。我決定從一個簡單的例子開始。爲什麼不能Rails渲染我的部分

筆者認爲:

= render :partial => "../snippets/indented_divs", :locals => {:width => 12} do 
    %p foo 

app/views/snippets/_indented_divs.html.haml

%div.col-sm-1 
%div{:class => "col-sm-#{width-2}"} 
    = yield 
%div.col-sm-1 

錯誤:

'nil' is not an ActiveModel-compatible object. It must implement :to_partial_path. 

我已經看到了這個錯誤的討論,但它涉及到人的努力隱式地將ActiveModel兼容對象轉換爲部分。我不是。我試圖直接打電話給我的部分。

發生了什麼事?

UPDATE

順便說一句,該問題顯然是與產生的塊,而不是找到局部的,因爲當我更新視圖不​​採取塊...

= render :partial => "/_snippets/indented_divs", :locals => {:width => 12} 
%p foo 

.. 。我得到...

<div class='col-sm-1'></div> 
<div class='col-sm-10'></div> 
<div class='col-sm-1'></div> 
<p>foo</p> 

更新2

原來我可以使這項工作有:

= render :layout => "/snippets/indented_divs", :locals => {:width => 12} do 
    %p foo 

但正如我在實際渲染的部分在這裏,它仍然會是很好的知道爲什麼傳遞塊渲染部分沒有工作。

回答

1

嘗試這樣做,問題可能出在定位片斷目錄

= render "/_snippets/indented_divs", :width => 12 do 
%p foo 
+0

THX但這不是它 - 將更新我的帖子有更多信息 –

+0

嘗試取悅 –

+0

我做到了,THX - 這是不是 –

0

嘗試刪除undercore

= render :partial => "snippets/indented_divs", :locals => {:width => 12} do 
%p foo 

UPDATE:

添加underscore到文件中,它應該是_indented_divs.html.haml。部分應始終始於underscore

app/views/snippets/_indented_divs.html.haml: 
+0

THX但這不是它 - 得到了''../ snippets/indented「'(和部分文件名的相應改變)相同的錯誤 –

+0

哦,爲你的文件添加下劃線。我更新了我的答案。部分總是以'_''下劃線開頭。 – HashRocket

+0

對不起,thx - 我在本地修復了這個問題,但是沒有在我的stackoverflow問題文本中 - 我現在修復了我的問題文本 - 提供幫助程序明確地找到了部分內容,因爲它呈現了部分內容,當我不嘗試通過它一個塊 - 問題是與傳遞一個塊有關 –