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.
Danke, das habe ich ausprobiert. 'collection_action' ist in diesem Kontext nicht definiert. –
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. –
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. –