Comment faire pour que ActiveAdmin fonctionne avec les parameters forts?

Mise à jour: cette question a été posée avant qu’il n’y ait déjà une solution dans ActiveAdmin. Comme Joseph le dit, la documentation ActiveAdmin contient désormais ces informations, mais les réponses sont fournies à ceux qui travaillent avec des versions antérieures d’ActiveAdmin.

Lorsque le paramètre strong_parameters 0.1.4 est utilisé avec ActiveAdmin 0.5.0 dans Rails 3.2.8, si le modèle que vous utilisez utilise StrongParameters en incluant:

include ::ActiveModel::ForbiddenAtsortingbutesProtection 

vous obtenez alors l’erreur suivante dans le journal si vous essayez de créer / modifier un enregistrement:

 ActiveModel::ForbiddenAtsortingbutes (ActiveModel::ForbiddenAtsortingbutes) 

La documentation indique maintenant clairement comment configurer les parameters forts dans Rails 4. Voir:

https://github.com/gregbell/active_admin/blob/master/docs/2-resource-customization.md#setting-up-strong-parameters

Effectuez la mise à jour vers la dernière gemme inherited_resources et procédez comme suit dans votre bloc de contrôleur:

 ActiveAdmin.register Blog do #... controller do #... def permitted_params params.permit(:blog => [:name, :description]) # params.permit! # allow all parameters end end end 

La réponse acceptée ne fonctionnait pas pour moi avec les ressources définies dans un moteur. J’ai donc trouvé les ressources originales dans inherited_resources / lib / inherited_resources / base_helpers.rb et j’ai trouvé cette solution qui imite ce code et qui fonctionne avec les moteurs:

Dans config/initializers/active_admin.rb :

 ActiveAdmin::ResourceController.class_eval do # Allow ActiveAdmin admins to freely mass-assign when using strong_parameters def resource_params [(params[resource_request_name] || params[resource_instance_name]).try(:permit!) || {}] end end 

dans vos config / initializers / active_admin.rb

 config.before_filter do params.permit! end 

Mise à jour: Voir la réponse de @ Brendon-Muir pour savoir comment procéder. Les informations suivantes étaient correctes précédemment, donc je vais les laisser ici au cas où cela aiderait d’autres utilisateurs avec une version plus ancienne d’ActiveAdmin.

Un correctif avait été proposé dans un fil de groupe Google: https://groups.google.com/forum/?fromgroups=#!topic/activeadmin/XD3W9QNbB8I

Ensuite, était mis en place ici: https://github.com/gregbell/active_admin/issues/1731

Mais pour le moment, le moyen le moins invasif d’append des parameters solides à ActiveAdmin dans votre application consiste à redéfinir ressource_params dans votre bloc de contrôleur, soit via la méthode “Permettre tous les parameters”, moins sécurisée:

 controller do def resource_params return [] if request.get? [ params[active_admin_config.resource_class.name.underscore.to_sym].permit! ] end end 

ou le moyen explicite plus sûr:

 controller do def resource_params return [] if request.get? [ params.require(:name_of_model).permit(:each,:param,:goes,:here,:if,:you,:want) ] end end 

Voir Docs Active Admin sur la modification des contrôleurs:
http://activeadmin.info/docs/8-custom-actions.html#modify_the_controller

Vous pouvez également utiliser permit_params comme suit:

 ActiveAdmin.register Resource do permit_params do %i(first_name last_name) end index pagination_total: false do column :id column :first_name column :last_name actions end end