#ruby-on-rails #ruby-on-rails-3 #html-lists #formtastic #fieldset
#ruby-on-rails #ruby-on-rails-3 #html-списки #formtastic #набор полей
Вопрос:
Я пытаюсь сгруппировать связанные атрибуты в «Двойное поле», поместив их в блок form.inputs:
<%= semantic_form_for MyModel.new do |f| %>
<%= f.inputs 'Advanced' do %>
<%= f.input :name %>
<%= f.inputs 'Min/Max', class: 'doublefield' do %>
<%= f.input :min %>
<%= f.input :max %>
<% end %>
<%= f.inputs 'Zip/Place', class: 'doublefield' do %>
<%= f.input :zip %>
<%= f.input :place %>
<% end %>
<% end %>
<% end %>
Однако это приводит к подобной разметке (опущенная нерелевантная разметка):
<form accept-charset="UTF-8" action="my_model" class="formtastic" id="new_my_model" method="post" novalidate="novalidate">
<fieldset class="inputs">
<ol>
<li class="string input optional stringish" id="my_model_name_input">
...
</li>
<li class="input">
<fieldset class="doublefield">
...
</fieldset>
</li>
<fieldset class="doublefield">
...
</fieldset>
</ol>
</fieldset>
</form>
Только первый вложенный набор полей в наборе полей окружен <li>
тегом, остальные просто отображаются как <fieldset>
, что приводит к недопустимой разметке ( <fieldset>
поскольку прямой дочерний элемент <ol>
не допускается). Это не только некрасиво, но и затрудняет применение стилей к форме.
В своем исследовании я наткнулся на некоторые комментарии по поводу этой проблемы, в которых говорилось, что это могло быть проблемой с самим formtastic, но я до сих пор не нашел обходного пути или предложения.
Есть идеи?
Информация о версии:
- rails (3.2.0.beta bd4bd3f)
- formtastic (2.0.0.rc4 7d3bb2f)
- ruby 1.9.2p290 (2011-07-09 редакция 32553) [x86_64-linux]
Полная разметка:
<form accept-charset="UTF-8" action="my_model" class="formtastic" id="new_my_model" method="post" novalidate="novalidate">
<div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓">
<input name="authenticity_token" type="hidden" value="zPm0lLyT6MM4M LI1b7c9d7NqGQM2PiT kHsjUnfTWM="></div>
<fieldset class="inputs">
<legend><span>Advanced</span></legend>
<ol>
<li class="string input optional stringish" id="my_model_name_input">
<label class=" label" for="my_model_name">Name</label>
<input id="my_model_name" maxlength="255" name="my_model[name]" type="text">
</li>
<li class="input">
<fieldset class="doublefield">
<legend><span>Min/Max</span></legend>
<ol>
<li class="number input optional stringish" id="my_model_min_input">
<label class=" label" for="my_model_roosts_min">Min</label>
<input id="my_model_min" maxlength="4" name="my_model[min]" step="any" type="number">
</li>
<li class="number input optional stringish" id="my_model_max_input">
<label class=" label" for="my_model_max">Max</label>
<input id="my_model_roosts_max" maxlength="4" name="my_model[max]" step="any" type="number">
</li>
</ol>
</fieldset>
</li>
<fieldset class="doublefield">
<legend><span>Zip/Place</span></legend>
<ol>
<li class="string input optional stringish" id="my_model_zip_input">
<label class=" label" for="my_model_zip">Zip</label>
<input id="my_model_zip" maxlength="255" name="my_model[zip]" type="text">
</li>
<li class="string input optional stringish" id="my_model_place_input">
<label class=" label" for="my_model_place">Place</label>
<input id="my_model_place" maxlength="255" name="my_model[place]" type="text">
</li>
</ol>
</fieldset>
</ol>
</fieldset>
</div>
Ответ №1:
[РЕДАКТИРОВАТЬ] сделал ответ актуальным для Formtastic 2
Это была ошибка в formtastic, которая была исправлена 3 дня назад: https://github.com/justinfrench/formtastic/commit/4c5bf686b7fc5bbbc2e03c61cace101e713a51e0
Если вы не хотите ждать релиза (а вы, скорее всего, этого не сделаете), используйте версию из git:
gem 'formtastic', :git => 'git://github.com/justinfrench/formtastic.git'
Комментарии:
1. Это именно то, чего я хочу достичь. К сожалению, вложенный атрибут не решает проблему — он скорее помещает вложенный атрибут в html-разметку formset:
<fieldset class="doublefield" nested="true">...</fieldset>
Как указано, я использую formtastic2. Есть ли что-то похожее на nested-attribute ? Странная вещь в этой проблеме заключается в том, что первый вложенный набор полей действительно упаковывается в a<li>
, а следующие — нет.