Совместимость с аккордеоном fields_for и jQuery

На самом деле я просто копирую старый вопрос с 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, так что, надеюсь, Тайлер тоже получит пользу от вашего коллективного разума.

С уважением,

Кевин.


person Kevin Monk    schedule 07.07.2010    source источник


Ответы (1)


Начиная с Rails 2.3.5, вы можете разместить f.hidden_field(:id) там, где вы хотите, чтобы он существовал, и Rails заполнит детали.

Билет относительно этого изменения доступен здесь.

person justsee    schedule 07.03.2011