Ответ 1
В документации теперь четко указано, как идти о настройке сильных параметров в Rails 4. Смотрите:
Обновление: этот вопрос задавали до того, как в ActiveAdmin уже было решение для него. Как утверждает Джозеф, документация ActiveAdmin теперь содержит эту информацию, но ответы здесь приведены для тех, кто работает со старыми версиями ActiveAdmin.
Когда сильные_параметры 0.1.4 используются с ActiveAdmin 0.5.0 в Rails 3.2.8, если модель, которую вы используете, использует StrongParameters, включая:
include ::ActiveModel::ForbiddenAttributesProtection
тогда вы получите следующую ошибку в журнале, если попытаетесь создать/отредактировать запись:
ActiveModel::ForbiddenAttributes (ActiveModel::ForbiddenAttributes)
В документации теперь четко указано, как идти о настройке сильных параметров в Rails 4. Смотрите:
Обновите последний камень inherited_resources и сделайте это в блоке контроллера:
ActiveAdmin.register Blog do
#...
controller do
#...
def permitted_params
params.permit(:blog => [:name, :description])
# params.permit! # allow all parameters
end
end
end
Принятый ответ не работал у меня с ресурсами, определенными в движке, поэтому я отследил исходные ресурсы resource_params в inherited_resources/lib/inherited_resources/base_helpers.rb и придумал это решение, которое ближе подражает этому коду и работает с двигателями:
В 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
в вашем config/initializers/active_admin.rb
config.before_filter do
params.permit!
end
Обновление: см. ответ @Brendon-Muir для последнего способа сделать это. Следующая информация была правильной ранее, поэтому я оставлю ее здесь, если она поможет другим пользователям с более старой версией ActiveAdmin.
Патч был предложен в потоке группы google: https://groups.google.com/forum/?fromgroups=#!topic/activeadmin/XD3W9QNbB8I
Затем собирался здесь: https://github.com/gregbell/active_admin/issues/1731
Но на данный момент наименее инвазивным способом добавления поддержки активных параметров ActiveAdmin в ваше приложение является переопределение ресурсов_парама в блоке контроллера, либо с помощью метода "разрешить все параметры", что менее безопасно:
controller do
def resource_params
return [] if request.get?
[ params[active_admin_config.resource_class.name.underscore.to_sym].permit! ]
end
end
или более безопасный явный способ:
controller do
def resource_params
return [] if request.get?
[ params.require(:name_of_model).permit(:each,:param,:goes,:here,:if,:you,:want) ]
end
end
См. Активные документы администратора по изменению контроллеров:
http://activeadmin.info/docs/8-custom-actions.html#modify_the_controller
Вы также можете использовать permit_params
следующим образом:
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