Создание пользовательских вложенных форм в RailsAdmin

Я пытаюсь создать пользовательскую вложенную форму в RailsAdmin для одной из моих моделей, чтобы добавить больше функций, чем позволяет встроенный виджет.

У меня есть проект, который имеет_много технических спецификаций. В моем инициализаторе rails_admin.rb у меня есть следующее

config.model Project do
  edit do
    configure :tech_specs do
      partial 'tech_specs_field'
    end
  end
end

В _tech_specs_field.html.haml (лично мне удобнее использовать erb, но я получаю очень странные ошибки «нет метода safe_concat для nil: NilClass», если я не использую haml) у меня есть

= form.fields_for(field.name) do |nested_form|
  = render :partial => 'spec', :locals => {:nested_form => nested_form}

- add = "<i class='icon-plus icon-white'></i> New Tech Spec".html_safe
= form.link_to_add add, field.name, { :class => 'btn btn-info' }

На самом деле я вижу план новых технических спецификаций, сгенерированный на странице в скрытом div внизу, но нажатие кнопки New Tech Spec ничего не делает. Внутри _spec.html.haml есть просто набор text_fields и hidden_fields плюс ссылка на удаление (которая действительно работает).

Мне интересно две вещи:

1) Как я могу отследить, что должно происходить в JS, и исправить его или мою часть для работы с вложенными формами RailsAdmin из гема bbenezech-nested_form (от которого зависит RailsAdmin)

2) Любые идеи относительно того, почему мой частичный должен быть в haml, кроме того, что использует RailsAdmin, и каким-то образом он несовместим с массивной цепочкой, генерирующей форму администратора?


person Aaron    schedule 24.04.2012    source источник
comment
Дополнительная информация: я обнаружил, что RailsAdmin вставляет другой JS-файл ra.nested-form-hooks.coffee, в котором есть метод готовности документа, который выглядит так, как будто он перезаписывает метод nestFormEvents.insertFields. Я не так хорошо разбираюсь в JS, но это похоже на то, как RailsAdmin делает свой виджет has_many с вкладками.   -  person Aaron    schedule 24.04.2012
comment
Это не постоянное решение, но если я закомментирую содержимое ra.nested-form-hooks.coffee, я смогу без проблем создавать собственные вложенные формы с зависимым гемом. Тем не менее, он все еще должен быть в хамле.   -  person Aaron    schedule 24.04.2012
comment
В настоящее время это открытая проблема на RailsAdmin. Я обновлю его, когда узнаю больше. github.com/sferik/rails_admin/issues/1094   -  person Aaron    schedule 01.05.2012


Ответы (1)


Это не очень хороший окончательный ответ, но мне удалось обойти проблему с помощью следующего взлома JS в ui.js.

  var oldNestedFormEvents = window.nestedFormEvents.insertFields
  window.nestedFormEvents.insertFields = function (content, assoc, link) {
    if ($(link).closest('.no_tabs').length > 0) {
      return $(content).insertBefore(link);
    } else {
      return oldNestedFormEvents(content, assoc, link);
    }
  }

В пользовательских фрагментах, где я хочу использовать вложенную форму, я просто добавляю класс no_tabs к содержащему их div и повторно использую исходный метод insertFields из bbenezech-nested_forms.

person Aaron    schedule 25.04.2012