Совместное использование acts_as_list и nested_form в приложении Rails 3.1.rc4 - PullRequest
3 голосов
/ 02 августа 2011

Я изначально опубликовал это как проблему на nested_form, но не имел никакого понимания. Деталь здесь: https://github.com/ryanb/nested_form/issues/66

Резюме:

У меня есть немного необычное требование, которое означает, что я должен уважать положения act_as_list при добавлении / удалении вложенных моделей.

  class Journey < ActiveRecord::Base
     has_many :legs, :dependent => :destroy
     accepts_nested_attributes_for :legs, :allow_destroy => true
   end

  class Leg < ActiveRecord::Base
     belongs_to :journey
     acts_as_list :scope => :journey
   end

Не думаю, что это странно - у ног моего путешествия есть пункт назначения, и их порядок определяет начальную и конечную точки.

Конечно, это означает, что я не могу использовать стандартные помощники f.link_to_add и f.link_to_remove, так как это помощники уровня формы, и я хочу, чтобы помощник сидел с вложенной формой. Я могу справиться с JS, чтобы обновить позиции последующих этапов без проблем, но мне было интересно, есть ли уже установленный способ сделать это, или мне нужно разветвиться, построить новых помощников и затем выдать запрос на извлечение? Я думал что-то вроде того, чтобы быть в состоянии сделать:

<%= f.link_to_add_inline "Add leg", :legs, :after => current_leg.position %>

Мысли

С тех пор я возился с созданием своих собственных помощников, которые будут сохранять форму обратно всякий раз, когда я захочу добавить ногу, и использую методы act_as_list insert_at_position. Это выглядит очень нахально и не очень элегантно. Есть ли что-нибудь, что могло бы облегчить это или другой более изящный подход. По сути, я хочу иметь возможность:

  1. Добавить ноги в список между любыми существующими ногами или в конец списка
  2. В идеале не нужно сохранять объекты в БД, пока пользователь не сохранит форму
  3. И, конечно же, для того, чтобы по-прежнему иметь возможность подключаться к сортируемому материалу и другим качествам, которые предоставляет act_as_list.

Предложения

...