content_tag不是从ActionView :: Helpers :: FormBuilder呈现的

时间:2012-05-13 00:18:33

标签: ruby-on-rails ruby haml formbuilder

我一直在尝试使用Rails中的自定义表单构建器方法。我的目标与formtasticf.inputs方法类似。到目前为止,这是我的代码:

class Builder < ActionView::Helpers::FormBuilder  

  def fieldset(name)
    @template.content_tag :fieldset, :class => 'inputs' do
      @template.content_tag :div, :class => 'legend' do
        @template.content_tag :span, name
      end
      @template.content_tag :ol do
        yield
      end
    end
  end

  def input_field(name, classes='', *args)
    @template.content_tag :li, class: "input #{classes}" do
      label(name) + text_field(name)
    end
  end

end

那么我可以在HAML中构建表单,如下所示:

  = f.fieldset "General Info" do
    = f.input_field :name
    = f.input_field :slug, 'last'

问题是呈现的HTML会删除图例DIV。

<fieldset class="inputs">
  <ol>
    <li class="input ">
      <label for="content_instance_name">Name</label>
      <input id="content_instance_name" name="content_instance[name]" size="30" type="text" value="Home Page">
    </li>
    <li class="input last">
      <label for="content_instance_slug">Slug</label>
      <input id="content_instance_slug" name="content_instance[slug]" size="30" type="text" value="home-page">
    </li>
  </ol>
</fieldset>

好像我错过了一些东西 提前谢谢。

以下是调整后的字段集方法:

def fieldset(name)
  @template.content_tag :fieldset, :class => 'inputs' do
    legend = @template.content_tag :div, @template.content_tag(:span, name), :class => "legend"
    legend += @template.content_tag :ol do
      yield
    end
  end
end

1 个答案:

答案 0 :(得分:2)

仅渲染块的返回值。添加+,以便返回content_tag个来电。 Similar question here.