我的模型看起来像这样:
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_relation1
和some_relation2
的输入最终将会出现在类中和冲突。
此时我尝试为some_relation2
创建一个特殊的类,它继承了之前的类,只是为了让ActiveAdmin生成唯一的HTML类。
这有效,但现在我在提交表单时遇到此错误:
SomeClass2(#70117816523800) expected, got ActionController::Parameters(#70117783961220)
我在这里不知所措。 有没有人知道这样做的正确方法,或者是将这个功能添加到ActiveAdmin的猴子补丁?
答案 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以供接受。