1

我一直在尝试使用 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
4

1 回答 1

2

仅呈现块的返回值。添加 a+以便您的两个content_tag电话都返回。类似的问题在这里。

于 2012-05-13T00:24:18.483 回答