61 votes

Rails 3. Comment ajouter un helper qu'ActiveAdmin utilisera ?

Je suis en train de créer une aide qui sera utilisée par Formtastic, mais je reçois le message suivant undefined local variable or method erreur. Je ne sais pas où le mettre pour qu'il puisse fonctionner.

J'ai déjà essayé dans l'application_helper.rb et dans app/helpers/active_admin/view_helpers.rb

70voto

Bishma Stornelli Points 839

Vous pouvez les définir dans app/helpers/ comme vous l'avez essayé, mais vous devez les inclure dans l'initialisateur de l'administration active comme ceci :

# in config/initializers/active_admin.rb
ActiveAdmin.setup do |config|
    ....
end

module ActiveAdmin::ViewHelpers
  include ApplicationHelper
end

60voto

alony Points 6018

Vous devez placer vos fonctions d'aide dans app/helpers/active_admin/views_helper.rb fichier Exemple :

module ActiveAdmin::ViewsHelper #camelized file name
  def my_helper 
       # do something 
  end 
end

25voto

Mars Redwyne Points 455

Ce que j'ai constaté en utilisant ActiveAdmin 0.6.1, c'est qu'ActiveAdmin recherche les aides dans app/helpers/active_admin/*_helper.rb, mais le nom n'a pas vraiment d'importance .

Ce qui compte, c'est :

  1. Le nom du fichier doit se terminer par "_helper.rb".
  2. Le nom du module doit être la casse du nom du fichier.
  3. le fichier doit être dans le répertoire app/helpers/active_admin/.

Si quelqu'un sait où cela est officiellement documenté, ce serait génial.

Voici un exemple : https://gist.github.com/afred/7035a657e8ec5ec08d3b

12voto

okliv Points 1943
app/helpers/active_admin/view_helpers.rb

ne m'a pas aidé

EDITION : j'ai changé le fichier en views_helper.rb et ViewsHelper en conséquence et cela a fonctionné.

*mais si vous voulez le définir uniquement pour certaines ressources, vous pouvez le faire à ma façon.


je devais définir

#app/helpers/active_admin/categories_helper.rb

module ActiveAdmin::CategoriesHelper

  def helper_method

  end

end

pour ma ressource active_admin app/admin/categories.rb

6voto

Anh Nguyen Points 559

J'arrive à le faire fonctionner dans ActiveAdmin 0.6.1 (enfin !). La solution est de créer un module d'aide comme suit :

# app/helpers/active_admin_helpers.rb
module ActiveAdminHelpers
  # make this method public (compulsory)
  def self.included(dsl)
    # nothing ...
  end

  # define helper methods here ...
  def helper_method
    ...
  end
end

puis inclure ce module de cette façon :

# app/admin/[resource].rb
include ActiveAdminHelpers

ActiveAdmin.register [Resource] do
  ...

end

En fait, ce n'est pas une belle solution mais elle est DRY et fonctionne bien. J'ai déjà lu et essayé beaucoup de méthodes et de solutions comme le module ViewHelpers (mis sous 'app/helpers' ou 'app/admin/active_admin'), ActiveAdmin::DSL monkey Parcheando, ... mais celles-ci n'ont jamais fonctionné dans la version 0.6.1 (je n'ai pas d'idées pour les autres versions) :(

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X