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
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
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
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:
Si quelqu'un sait où cela est officiellement documenté, ce serait génial.
Voici un exemple: https://Gist.github.com/afred/7035a657e8ec5ec08d3b
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
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) :(
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
.
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
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 %>
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.
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.