活动管理员:两个同一类的两个对象的嵌套表单

时间:2014-11-25 14:54:06

标签: ruby-on-rails forms activeadmin nested-forms

我的模型看起来像这样:

class MyModel < ActiveRecord::Base
  belongs_to :some_relation1
  belongs_to :some_relation2  # Same class as some_relation1
end

MyModel ActiveAdmin表单页面中,我想显示两个内部表单:一个用于some_relation1,另一个用于some_relation2

我这样做:

f.inputs 'Test 1' do
  f.semantic_fields_for(f.object.some_relation1 || f.object.build_some_relation1) do |inner_f|
    inner_f.inputs '' do
      # Some inputs
    end
  end
end

f.inputs 'Test 1' do
  f.semantic_fields_for(f.object.some_relation2 || f.object.build_some_relation2) do |inner_f|
    inner_f.inputs '' do
      # Some inputs
    end
  end
end

我遇到的第一个问题是ActiveAdmin似乎是根据底层对象的类生成HTML输入类,因此some_relation1some_relation2的输入最终将会出现在类中和冲突。

此时我尝试为some_relation2创建一个特殊的类,它继承了之前的类,只是为了让ActiveAdmin生成唯一的HTML类。 这有效,但现在我在提交表单时遇到此错误:

SomeClass2(#70117816523800) expected, got ActionController::Parameters(#70117783961220)

我在这里不知所措。 有没有人知道这样做的正确方法,或者是将这个功能添加到ActiveAdmin的猴子补丁?

1 个答案:

答案 0 :(得分:1)

首先,我的目的是分享活动管理员可用的内容,这可能适用于您的情况。但由于我对你的问题没有那么大的信心,请你回答我的回答并让我知道这是否有帮助?

ActiveAdmin.register Post do

form do |f|
  .......
  f.inputs do
    f.has_many :some_relation_one, :allow_destroy => true, as: :uniq_name ,:heading => 'Themes', :new_record => false do |cf|
      cf.input :title
    end
  end
  f.actions
 end
end

另外,请确保在您想要的模型中添加accept_nested_attributes_for:some_relation_ship以供接受。