2012-09-27 147 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呈現另一個註冊資源的形式,如果這是你想要做的。如果這是一個很長的自定義形式,最好渲染一個部分。 –