Rails のカスタム フォーム ビルダー メソッドを試してみました。私の目標は、formtasticのf.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