1

我正在尝试在 RailsAdmin 中为我的一个模型创建一个自定义嵌套表单,以添加比内置小部件允许的更多功能。

我有一个拥有_many TechSpecs 的项目。在我的 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,但我得到了非常奇怪的“no method safe_concat for 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 中看到生成的新 tech_specs 的蓝图,但是单击 New Tech Spec 按钮什么也没做。_spec.html.haml 内部只是一堆 text_fields 和 hidden_​​fields 加上删除链接(确实有效)。

我想知道两件事:

1)我如何跟踪 JS 中应该发生的事情并修复它或我的部分以使用 bbenezech-nested_form gem 中的 RailsAdmin 嵌套表单(RailsAdmin 依赖于)

2)关于为什么我的部分必须在 haml 中,而不是 RailsAdmin 使用的任何想法,并且不知何故它在生成管理表单的大规模链中不兼容?

4

1 回答 1

2

这不是一个好的最终答案,但我能够通过 ui.js 中的以下 JS hack 解决问题

  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 中,并重用来自 bbenezech-nested_forms 的原始 insertFields 方法。

于 2012-04-25T13:49:48.543 回答