2014-12-05 58 views
0

我有我的ActiveAdmin安裝多個資源共享同一性狀頗多,如:DRY-ING高達ActiveAdmin

  • 相同或相似的範圍
  • 相同或類似的控制器方法( action_methods,例如)在編輯動作中顯示動作
  • 類似的屬性(與代碼塊
  • 類似的屬性(與代碼塊))

避免在不同資源中複製此功能的最佳方法是什麼?

我已經設置了裝飾器,以避免在索引視圖中重複功能,但我不確定是否(以及如何?)這可以在其他情況下使用。

+0

你有沒有看使用的擔憂? http://richonrails.com/articles/rails-4-code-concerns-in-active-record-models – 2014-12-05 23:25:48

+0

我熟悉常見的模式,以便在常規的ruby(和rails)代碼中幹掉東西,但我有不知道如何將其綁定到ActiveAdmin及其語法。 :/ – rogerkk 2014-12-06 00:45:07

回答

3

你需要用猴子補丁擴展DSL:

module ActiveAdmin 
    # This is the class where all the register blocks are evaluated. 
    class ResourceDSL < DSL 
    def your_custom_method attr 
     #common code 
    end 
    end 
end 

現在,您可以在您註冊的資源文件中使用your_custom_method。

https://github.com/activeadmin/activeadmin/blob/master/lib/active_admin/resource_dsl.rb

+0

對不起,我遲到的回覆,我等着看有沒有人有其他建議,然後忘了它。所以這真的是最好的辦法嗎?哎喲。 – rogerkk 2015-01-08 10:14:14

4

您還可以extend你的模塊。例如:

module AccountManageable 
    def has_manageable_account 
    permit_params :name, :email, :role, :avatar 

    filter :name, as: :string 
    filter :email, as: :string 

    # ... other DSL methods 
    end 
end 

,然後在你的管理

ActiveAdmin.register Admin do 
    extend AccountManageable 

    has_manageable_account 
end