На самом деле я просто копирую старый вопрос с railsforum, как он задал его еще в мае 2009 года, и единственный ответ - собственное неэлегантное исправление автора. Я задавался вопросом, знает ли кто-нибудь лучший способ? В противном случае я собираюсь использовать javascript для перемещения скрытого поля, как он.
Вот исходный вопрос:
Всем привет! Буду благодарен за дельный совет по теме:
Можно ли переопределить автоматическое создание Rails скрытых полей идентификатора в fields_for для ассоциации has_many? Я хотел бы создать свой собственный, чтобы я мог выбирать, куда идти.
Вот почему:
Я пытаюсь поместить виджет jQuery-ui Accordion вокруг формы, которая выглядит примерно так:
<div id="diagram_elements_form">
<% diagram_form.fields_for :elements do |element_fields| %>
<% link_to "#" do %>
<%= element_fields.object.name %>
<% end %>
<%= render :partial => "edit_element_base", :locals => { :f => element_fields } %>
<% end %>
</div>
модель в упрощенном виде выглядит так:
class Diagram < ActiveRecord::Base
has_many :elements
accepts_nested_attributes_for :elements
end
Я думаю, что у меня есть модель/контроллер, потому что я могу CRUD сколько душе угодно. Но аккордеон выходит какой-то хреновый.
виджет jQuery UI/Accordion ищет html в форме:
<div id="accordion">
<a href="#">First header</a>
<div>First content</div>
<a href="#">Second header</a>
<div>Second content</div>
</div>
Кажется, что это легко сделать с помощью рельсов, но я действительно задыхаюсь. Вкладки отображаются, но перекошены, и, наконец, я понял, что это из-за скрытого_поля, которое рельсы автоматически добавляют для каждого объекта в fields_for. То, что у меня получается, выглядит так:
<div id="accordion">
<input type="hidden" name="...id" value="2" />
<a href="#">First header</a>
<div>First content</div>
<input type="hidden" name="...id" value="3" />
<a href="#">Second header</a>
<div>Second content</div>
</div>
... Так что скрытые поля становятся частью структуры аккордеона. Я хотел бы переместить поля идентификатора внутри тегов DIV. Любые идеи?
еще раз спасибо, Тайлер
У меня точно такая же проблема, как у Тайлера. Скрытые поля, сгенерированные fields_for, портят пользовательский интерфейс аккордеона, и на данный момент я не вижу способа изменить их положение, кроме как переместить их с помощью javascript.
Я опубликую ссылку на это на railsforum, так что, надеюсь, Тайлер тоже получит пользу от вашего коллективного разума.
С уважением,
Кевин.