为什么赢得Rails渲染我的部分

时间:2016-03-04 03:07:54

标签: ruby-on-rails ruby haml

我试图通过将多个嵌套元素转换为产生块的部分来稍微干掉我的视图。我决定从一个简单的例子开始。

在我看来:

= 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兼容对象隐式转换为部分对象的人有关。我不是。我试图直接打电话给我的部分。

发生了什么?

更新

顺便说一下,问题显然是产生阻塞,而不是找到部分阻塞,因为当我更新视图时不接受阻塞......

= 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

但是,由于我实际上在这里渲染了部分内容,所以知道为什么将一个块传递给渲染部分并不起作用仍然很好。

2 个答案:

答案 0 :(得分:1)

尝试这样做,问题可能在于找到代码段目录

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

答案 1 :(得分:0)

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

underscore

更新:

_indented_divs.html.haml添加到文件中,它应该是underscore。部分应始终以app/views/snippets/_indented_divs.html.haml: 开头。

test = 'jfh345;54dfg5dfg@@#';

res = test.replace(/[^\d;]+/g, '');