Rails ActiveAdmin 注册,包装另一个资源



我有 2 个 activeadmin 资源,两者都是模型的子类,使用 STI。例如:

base_model.rb

class BaseModel < ActiveRecord::Base
end

male_model.rb

class MaleModel < BaseModel
end

female_model.rb

class FemaleModel < BaseModel
end

管理员/male_model.rb

ActiveAdmin.register MaleModel do
  menu :parent => "Models", :label => "Male Model"
  # A big long custom form follows...
  form do |f|
    f.inputs
    f.buttons
  end
end

admin/female_model.rb

ActiveAdmin.register FemaleModel do
  menu :parent => "Models", :label => "Female Model"
  # The SAME big long custom form follows...
  form do |f|
    f.inputs
    f.buttons
  end
end

呈现相同表单但创建不同子类(MaleModel或FemaleModel)的记录的正确方法是什么?

我现在正在做的是维护 2 个 activeadmin 资源,其中包含几乎完全相同(庞大)的代码。完全不干。请分享您在这种情况下所做的工作。

John

我没有尝试过这个,但你可以在控制器中定义一个@object变量:

controller do
    before_filter :set_object, :only => [:new, :edit]
    ....
    def set_object
        @object = MaleModel.find(params[:id]) rescue MaleModel.new
    end
end

然后,您可以呈现表单并使用变量@object而不是@male_model@female_model

form :partial => "models/form"
# app/views/models/_form.html.erb
<%= semantic_form_for [:admin, @object] do |f| %>
    <%= f.inputs %>
    <%= f.actions %>
<% end %>