2016-04-02 5 views
0

Ich habe eine Suchsammlungsaktion, die von allen Ressourcencontrollern in ActiveAdmin zugänglich und überschreibbar sein soll. Es ist trivial Controller-Aktionen in einer einzigen Active Admin Ressource mit dem folgenden Code zu erstellen:Hinzufügen einer Route/Aktion zu einem ActiveAdmin-Basiscontroller?

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 

Aber wie würde ich eine ähnliche Aktion in den ActiveAdmin Basis-Controller? In Rails verhält sich ApplicationController wie jeder andere Controller, auf dem wir Routen, Aktionen, Hilfsmethoden usw. erstellen können. Ich möchte jedoch, dass diese Aktion nur für Active Admin gilt, nicht für meine gesamte App. Gibt es in ActiveAdmin ein Äquivalent zu ApplicationController?

der AA-Code Blick durch, fand ich die folgenden Basissteuerungen, die die übergeordneten Klassen aller Ressourcensteuerungen sind:

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

jedoch die collection und member Aktionen nicht innerhalb dieser Klassen definiert.

Antwort

0

Ich landete nur auf Scoping die Strecke/Controller-Aktion zu einem spezifische Ressource. Ich bin mir nicht sicher, ob das, was ich verlange, derzeit mit der API von AA möglich ist.

1

Ich glaube, dass alle AA-Ressourcen-Controller von ActiveAdmin :: ResourceController erben. Siehe Dokumentation hier Class: ActiveAdmin::ResourceController

ich hier aus dem Gedächtnis zu arbeiten, aber ich würde durch das Einwickeln der Controller-Code in active_admin.rb mit folgendem beginnen:

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

Danke, das habe ich ausprobiert. 'collection_action' ist in diesem Kontext nicht definiert. –

+0

Sie haben Recht. collection_action ist im AA DSL definiert. Ich lief über diese: https://www.viget.com/articles/8-insanely-useful-activeadmin-customizations, aber habe nicht herausgefunden, wie collection_action in das Modul zu mischen. –

+0

Danke sah das. Ich habe gerade die Route/Controller-Aktion auf eine bestimmte Ressource beschränkt. Ich bin mir nicht sicher, ob das, was ich verlange, derzeit mit der API von AA möglich ist. –

Verwandte Themen