0

为了不重复自己,我想创建一个以特定方式呈现表单块(文本字段或文本区域)的函数。我想要这样的结果(使用 Haml 和 twitter-bootstrap):

.form-block.input-prepend
    %span.add-on>
        %i.icon.icon-home
    = f.text_field :name, :value => @store.name, :placeholder => 'Company Name'

为此,我创建了一个文件views/layouts/_form-block.html.haml,在其中插入了以下代码:

.form-block.input-prepend
    %span.add-on>
        %i{ :class => "icon icon-#{icon}" }
    = yield

我使用以下方法在我的视图中调用该块:

- render :template => 'layouts/_form-block', :locals => { :icon => 'home' } do
    = f.text_field :name, :value => @store.name, :placeholder => 'Company Name'

但它不起作用。我有以下错误'nil' is not an ActiveModel-compatible object that returns a valid partial path.

你有什么主意吗?这是最好的方法吗?

提前致谢。

4

1 回答 1

2

如果要用于= yield传递块,则需要渲染为布局。使用render :layout =>而不是render :template =>.

于 2012-08-17T19:13:58.457 回答