0

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

base_model.rb

class BaseModel < ActiveRecord::Base

end

男性模型.rb

class MaleModel < BaseModel

end

女模特.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 资源,其中包含几乎完全相同的(庞大的)代码。完全未干燥。请分享您在这种情况下所做的事情。

约翰

4

1 回答 1

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_modelor @female_model

form :partial => "models/form"

# app/views/models/_form.html.erb
<%= semantic_form_for [:admin, @object] do |f| %>
    <%= f.inputs %>
    <%= f.actions %>
<% end %>
于 2012-09-27T17:24:56.200 回答