42

更新:这个问题是在 ActiveAdmin 中已经有解决方案之前提出的。正如 Joseph 所说,ActiveAdmin 文档现在包含此信息,但这里的答案是为那些使用旧版本 ActiveAdmin 的人提供的。

当 strong_parameters 0.1.4 与 Rails 3.2.8 中的 ActiveAdmin 0.5.0 一起使用时,如果您使用的模型正在使用 StrongParameters,请包括:

include ::ActiveModel::ForbiddenAttributesProtection

如果您尝试创建/编辑记录,则会在日志中收到以下错误:

ActiveModel::ForbiddenAttributes (ActiveModel::ForbiddenAttributes)
4

6 回答 6

60

更新到最新的 inherit_resources gem 并在您的控制器块中执行此操作:

ActiveAdmin.register Blog do
  #...
  controller do
    #...
    def permitted_params
      params.permit(:blog => [:name, :description])
      # params.permit! # allow all parameters
    end
  end
end
于 2013-03-27T07:18:34.790 回答
31

该文档现在清楚地说明了如何在 Rails 4 中设置强参数。请参阅:

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

于 2013-11-29T11:50:27.227 回答
19

接受的答案对我在引擎中定义的资源不起作用,所以我在hereded_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
于 2013-01-24T21:46:57.003 回答
19

在你的 config/initializers/active_admin.rb

config.before_filter do
  params.permit!
end
于 2013-08-07T18:12:07.367 回答
6

更新:请参阅@Brendon-Muir 的回答以了解最新的方法。以下信息之前是正确的,因此我将其保留在此处,以防它对使用旧版本 ActiveAdmin 的其他人有所帮助。

谷歌群组线程中提出了一个补丁: https ://groups.google.com/forum/?fromgroups=#!topic/activeadmin/XD3W9QNbB8I

然后被放在一起: https ://github.com/gregbell/active_admin/issues/1731

但就目前而言,在应用程序中为 ActiveAdmin 添加强参数支持的侵入性最小的方法是在控制器块中重新定义 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

于 2012-10-26T16:42:21.360 回答
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
于 2015-04-27T11:20:42.680 回答