2016-03-04 70 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问题文本中 - 我现在修复了我的问题文本 - 提供帮助程序明确地找到了部分内容,因为它呈现了部分内容,当我不尝试通过它一个块 - 问题是与传递一个块有关 –