2016-04-02 52 views
0

我有一個搜索集合操作,我想要被ActiveAdmin中的所有資源控制器訪問和覆蓋。這是微不足道的在一個單一的活動管理員資源創建控制器動作用下面的代碼:將路由/操作添加到ActiveAdmin基本控制器之一?

collection_action :autocomplete_user_last_name, method: :get 

    def autocomplete_user 
    term = params[:term] 
    users = User.where('first_name LIKE ? OR last_name LIKE ? OR email LIKE ?', "%#{term}%", "%#{term}%", "%#{term}%").order(:first_name) 
    render json: users.map { |user| 
     { 
     id:   user.id, 
     label:   user.full_name, 
     value:   user.full_name 
     } 
    } 
    end 

但我怎麼會讓人產生ActiveAdmin基地控制器內的類似行動?在Rails中,ApplicationController的行爲就像任何其他控制器一樣,我們可以創建路由,操作,輔助方法等,但是,我只希望將此操作限定在Active Admin中,而不是我的整個App。 ActiveAdmin中是否有與ApplicationController等效的功能?

通過AA代碼尋找,我發現了以下的基本控制器,其是所有資源控制器的超類:

ActiveAdmin::PageController 
ActiveAdmin::BaseController 
ActiveAdmin::ResourceController 

然而,collectionmember動作不這些類中定義的。

回答

0

我剛剛結束了作用域的路由/控制器操作的特定資源。不知道我現在可以使用AA的API。

1

我相信所有的AA資源控制器都是從`ActiveAdmin :: ResourceController'繼承的。看到這裏的文檔Class: ActiveAdmin::ResourceController

我是從內存在這裏工作,但我會通過包裝控制器代碼在active_admin.rb先從以下內容:

ActiveAdmin::ResourceController.class_eval do 

    collection_action :autocomplete_user_last_name, method: :get do 

    def autocomplete_user 
     term = params[:term] 
     users = User.where('first_name LIKE ? OR last_name LIKE ? OR email LIKE ?', "%#{term}%", "%#{term}%", "%#{term}%").order(:first_name) 
     render json: users.map { |user| 
     { 
      id:   user.id, 
      label:   user.full_name, 
      value:   user.full_name 
     } 
     } 
    end 
    end 
end 
+0

謝謝,我試過了。 'collection_action'沒有在該上下文中定義。 –

+0

你說得對。 collection_action在AA DSL中定義。我遇到了這個:https://www.viget.com/articles/8-insanely-useful-activeadmin-customizations,但還沒有想出如何將collection_action混合到模塊中。 –

+0

謝謝你看到了。我剛剛結束了對特定資源的路由/控制器操作的範圍。不知道我現在可以使用AA的API。 –

相關問題