Rails ActiveAdmin寄存器,包装另一个资源

时间:2012-09-27 17:18:53

标签: ruby-on-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

管理员/ 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资源,其中包含几乎完全相同(庞大)的代码。完全解开。请分享你在这种情况下所做的一切。

约翰

1 个答案:

答案 0 :(得分:1)

我没试过这个,但你可以在控制器中定义一个@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 %>