在RailsAdmin中创建自定义嵌套表单

时间:2012-04-24 14:00:35

标签: ruby-on-rails ruby rails-admin

我正在尝试在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 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_spec的蓝图,但是单击New Tech Spec按钮什么都不做。里面的_spec.html.haml只是一堆text_fields和hidden_​​fields以及删除链接(它确实有效)。

我想知道两件事:

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

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

1 个答案:

答案 0 :(得分: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方法。