Mise à jour: cette question a été posée avant qu'il n'y ait déjà une solution pour cela dans ActiveAdmin. Comme le dit Joseph, la documentation ActiveAdmin contient maintenant ces informations, mais les réponses ici sont fournies pour ceux qui travaillent avec des versions plus anciennes d'ActiveAdmin. =
Lorsque le 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::ForbiddenAttributesProtection
alors vous obtenez l'erreur suivante dans le journal si vous essayez de créer/modifier un enregistrement:
ActiveModel::ForbiddenAttributes (ActiveModel::ForbiddenAttributes)
La documentation indique maintenant clairement comment procéder pour configurer des paramètres forts dans Rails 4. Voir:
Mettez à jour la dernière 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])
# params.permit! # allow all parameters
end
end
end
La réponse acceptée ne fonctionnait pas pour moi avec des ressources définies dans un moteur, j'ai donc retrouvé les ressources_params d'origine dans inherited_resources/lib/inherited_resources/base_helpers.rb et j'ai trouvé cette solution qui imite de plus près 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 votre config/initializers/active_admin.rb
config.before_filter do
params.permit!
end
Mise à jour: Voir la réponse de @ Brendon-Muir pour la dernière façon de le faire. Les informations suivantes étaient correctes précédemment, je vais donc les laisser ici au cas où cela aiderait les autres avec une ancienne version d'ActiveAdmin.
Un correctif avait été proposé dans un fil de discussion Google: https://groups.google.com/forum/?fromgroups=#!topic/activeadmin/XD3W9QNbB8I
Puis était en train d'être mis en place ici: https://github.com/gregbell/active_admin/issues/1731
Mais pour l'instant, la façon la moins invasive d'ajouter une prise en charge de paramètres forts à ActiveAdmin dans votre application est de redéfinir resource_params dans votre bloc contrôleur, soit via la méthode "autoriser tous les paramètres", 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 de manière 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 Active Admin sur la modification des contrôleurs:
http://activeadmin.info/docs/8-custom-actions.html#modify_the_controller
Vous pouvez aussi 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