2012-09-27 146 views
0

我有2个activeadmin资源,都是使用STI的模型的子类。例如:Rails ActiveAdmin注册,包装另一个资源

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

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

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

然后你可以呈现一个形式和使用的@male_model@female_model变量@object代替。

form :partial => "models/form" 

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

嗯......我想过这样做。我想知道这是否是唯一的方法。我实际上并不需要呈现自定义的HTML表单。不过,它可能是最直接的解决方案。 –

+1

我不认为有可能告诉activeadmin呈现另一个注册资源的形式,如果这是你想要做的。如果这是一个很长的自定义形式,最好渲染一个部分。 –