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 に答える