web-dev-qa-db-fra.com

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

Je crée un assistant à utiliser par Formtastic mais j'obtiens le undefined local variable or method Erreur. Je ne sais pas où le mettre pour que ça marche.

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

61
leonel

Vous pouvez les définir dans app/helpers/comme vous l'avez essayé, mais vous devez les inclure via l'initialiseur de l'administrateur actif comme ceci:

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

module ActiveAdmin::ViewHelpers
  include ApplicationHelper
end
70
Bishma Stornelli

Vous devez mettre vos fonctions d'assistance dans app/helpers/active_admin/views_helper.rb Exemple de fichier:

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

Ce que j'ai trouvé en utilisant ActiveAdmin 0.6.1, c'est que ActiveAdmin recherchera des assistants 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 camel case du nom de fichier
  3. le fichier doit se trouver 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

23
Mars Redwyne
app/helpers/active_admin/view_helpers.rb

ne m'a pas aidé

EDITED: je l'ai changé en views_helper.rb & 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 mon application de ressource active_admin/admin/categories.rb

12
okliv

Je peux le faire fonctionner dans ActiveAdmin 0.6.1 (enfin!). La solution consiste à créer un module d'assistance 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 incluez ce module de cette façon:

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

ActiveAdmin.register [Resource] do
  ...

end

En fait, ce n'est pas une bonne solution mais c'est DRY et fonctionne bien. J'ai déjà lu et essayé beaucoup de méthodes et de solutions telles que le module ViewHelpers (placé sous 'app/helpers' ou 'app/admin/active_admin '), patches de singe ActiveAdmin :: DSL, ... mais ceux-ci n'ont jamais fonctionné dans la version 0.6.1 (je n'ai aucune idée des autres versions) :(

6
Anh Nguyen

Définition de ActiveAdmin::ViewHelpers dans app/admin/active_admin/view_helpers.rb travaille pour moi avec activeadmin 0.3.4 et 0.5.0.

4
tfischbach

Une autre façon de procéder consiste à faire en sorte que le contrôleur ActiveAdmin généré en arrière-plan inclue l'aide. Cette méthode permettra de rendre l'inclusion des assistants explicite par fichier plutôt que globale.

ActiveAdmin.register MyModel do
  controller do
    include MyHelper
  end
end
4
Del

en utilisant activeadmin 1.0.0.pre1 de git: //github.com/activeadmin/activeadmin.git

Rails 4.2.1

Cela a fonctionné pour moi ...

my_app/app/helpers/active_admin/resources_helper.rb

module ActiveAdmin
  module ResourcesHelper
    def resource_form_for(_resource, _params, _options = {}, &_block)
      url = if _resource.new_record?
              UrlBuilder.resources_path(_resource.class, _params)
            else
              UrlBuilder.resource_path(_resource.class, _params)
            end

      method = _resource.new_record? ? :post : :put

      options = { url: url, method: method, builder: ActiveAdmin::FormBuilder }
      options.merge!(_options)

      semantic_form_for([:admin, _resource], options) do |f|
        _block.call(f)
      end
    end
  end
end

my_app/app/admin/balance_sheets.rb

ActiveAdmin.register BalanceSheet do
  form partial: 'form'
end

my_app/app/views/admin/balance_sheets/_form.html.erb

<%= resource_form_for(resource, params) do |f| %>
  <%= f.inputs "Fields" do %>
    <%= f.input :progress_status %>
    <%= f.input :crew %>
    <%= f.input :shift %>
    <%= f.input :expected_progress %>
    <%= f.input :real_progress %>
    <%= f.input :analyst, collection: User.analysts %>
    <%= f.input :activity_ids, as: :check_boxes, collection: Activity.balance_sheet_activities %>
    <%= f.input :worker_ids, as: :check_boxes, collection: Worker.all %>
  <% end %>
  <%= f.actions %>
<% end %>
3
Leantraxxx

Vous pouvez également utiliser les partiels ActiveAdmin:

render partial: 'admin/my_partial', locals: { var: my_var }

Et à l'intérieur app/views/admin/_my_partial.html.arb votre active_admin Ruby code.

2
Luc Boissaye

Ce qui a fonctionné pour moi avec Rails 3.2.11 et et gem activeadmin (0.5.1) n'a pas été d'ajouter le fichier app/active_admin/view_helpers.rb ou de déclarer des modules dans config/initializers/active_admin .rb

Je mets mes helpers logiquement, par modèle, dans les fichiers app/* _ helpers.rb. Puis à l'intérieur du fichier app/admin/model.rb que j'ai utilisé:

# app/admin/[resource].rb
ActiveAdmin.register [Resource] do
  ...
  filter :gender, as: :select, collection: proc{genders}
  ...
end

Pour utiliser l'aide dans les filtres, pour afficher une liste déroulante des sexes sur lesquels filtrer, dans la vue de liste. Pour les champs de formulaire de création correspondants, j'ai utilisé:

# app/admin/[resource].rb
ActiveAdmin.register [Resource] do
  form do |f|
    f.inputs "Case Manager" do
      ...
      f.input :gender, as: :radio, collection: genders
      ...
      f.buttons
    end
  end
end

Pour afficher les boutons radio du formulaire de saisie.

Vous ne savez pas pourquoi le proc{} est obligatoire en dehors de form do |f| block, mais si quelqu'un peut expliquer pourquoi c'est une mauvaise idée, je trouverai un moyen différent.

1
samsmith