42 votes

Comment faire pour qu'ActiveAdmin fonctionne avec des paramètres forts ?

Mise à jour : cette question a été posée avant qu'il n'y ait déjà une solution pour cela dans ActiveAdmin. Comme l'indique Joseph, la documentation d'ActiveAdmin contient désormais ces informations, mais les réponses données ici sont destinées à ceux qui travaillent avec des versions plus anciennes d'ActiveAdmin.

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

include ::ActiveModel::ForbiddenAttributesProtection

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

ActiveModel::ForbiddenAttributes (ActiveModel::ForbiddenAttributes)

59voto

Brendon Muir Points 1862

Mettez à jour la dernière version de la gemme inherited_resources et faites-le dans votre bloc contrôleur :

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

31voto

Joseph Ndungu Points 480

La documentation indique désormais clairement comment procéder pour configurer des paramètres forts dans Rails 4. Voir :

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

19voto

Nick Urban Points 1553

La réponse acceptée ne fonctionnait pas pour moi avec les ressources définies dans un moteur, donc j'ai retrouvé les resource_params originaux dans inherited_resources/lib/inherited_resources/base_helpers.rb et j'ai trouvé cette solution qui ressemble plus à ce code, et qui fonctionne avec les moteurs :

En 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

19voto

user1312806 Points 129

Dans votre config/initializers/active_admin.rb

config.before_filter do
  params.permit!
end

6voto

Gary S. Weaver Points 4034

Mise à jour : voir la réponse de @Brendon-Muir pour la dernière façon de procéder. Les informations suivantes étaient correctes auparavant, je les laisse donc ici au cas où elles aideraient d'autres personnes utilisant une ancienne version d'ActiveAdmin.

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

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

Mais pour l'instant, la façon la moins invasive d'ajouter le support des paramètres forts à ActiveAdmin dans votre application est de redéfinir resource_params dans votre bloc contrôleur, soit via la méthode "permit all params", qui est 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 la méthode explicite, plus sûre :

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 les documents d'Active Admin sur la modification des contrôleurs :
http://activeadmin.info/docs/8-custom-actions.html#modify_the_controller

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