更新:在ActiveAdmin中已经有解决方案之前询问了这个问题。正如约瑟夫所述,ActiveAdmin文档现在包含此信息,但此处的答案是为使用旧版ActiveAdmin的人提供的。
当strong_parameters 0.1.4与Rails 3.2.8中的ActiveAdmin 0.5.0一起使用时,如果您使用的模型使用StrongParameters,则包括:
include ::ActiveModel::ForbiddenAttributesProtection
如果您尝试创建/编辑记录,则会在日志中收到以下错误:
ActiveModel::ForbiddenAttributes (ActiveModel::ForbiddenAttributes)
答案 0 :(得分:59)
更新到最新的inherited_resources gem并在控制器块中执行此操作:
ActiveAdmin.register Blog do
#...
controller do
#...
def permitted_params
params.permit(:blog => [:name, :description])
# params.permit! # allow all parameters
end
end
end
答案 1 :(得分:31)
文档现在清楚地说明了如何在Rails中设置强参数4.参见:
答案 2 :(得分:19)
接受的答案对于我在引擎中定义的资源不起作用,所以我在inherited_resources / lib / inherited_resources / base_helpers.rb中找到了原始的resource_params,并提出了这个更接近模仿该代码的解决方案,哪个有效发动机:
在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
答案 3 :(得分:19)
config.before_filter do
params.permit!
end
答案 4 :(得分:6)
更新:请参阅@ Brendon-Muir的答案,了解最新的做法。以下信息以前是正确的,所以我会留在这里,以防其他人使用旧版ActiveAdmin。
谷歌小组讨论中提出了一个补丁: https://groups.google.com/forum/?fromgroups=#!topic/activeadmin/XD3W9QNbB8I
然后在这里被放在一起: https://github.com/gregbell/active_admin/issues/1731
但是现在,在应用程序中为ActiveAdmin添加强参数支持的最小侵入性方法是通过“permit all params”方法重新定义控制器块中的resource_params,这种方法不太安全:
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
请参阅有关修改控制器的Active Admin文档:
http://activeadmin.info/docs/8-custom-actions.html#modify_the_controller
答案 5 :(得分:3)
您还可以按如下方式使用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