fields_for и jQuery аккордеонная совместимость - PullRequest
3 голосов
/ 08 июля 2010

На самом деле я просто копирую старый вопрос из railsforum, который он задал ему еще в мае '09, и единственный ответ - это авторское исправление.Интересно, кто-нибудь знает лучший способ?В противном случае я собираюсь использовать javascript для перемещения скрытого поля, как у него.

Вот оригинальный вопрос:


Привет!Благодарен за любые полезные советы по этой теме:

Можно ли переопределить автоматическую генерацию Rails скрытых полей идентификаторов в fields_for для ассоциации has_many?Я хотел бы создать свой собственный, чтобы я мог выбрать, куда это пойдет.

И вот почему:

Я пытаюсь разместить виджет аккордеона jQuery-ui вокруг формы, которая выглядит немноговот так:

<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>

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

С уважением,

Кевин.

1 Ответ

3 голосов
/ 07 марта 2011

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

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

...