web-dev-qa-db-ja.com

ActiveAdminを強力なパラメーターで動作させる方法は?

更新:この質問は、ActiveAdminで解決策が既に存在する前に尋ねられました。ジョセフが述べているように、ActiveAdminのドキュメントにはこの情報が含まれていますが、ActiveAdminの古いバージョンを使用している人向けの回答が提供されています =

Rails 3.2.8でActiveAdmin 0.5.0でstrong_parameters 0.1.4を使用する場合、使用しているモデルが次を含めてStrongParametersを使用している場合

include ::ActiveModel::ForbiddenAttributesProtection

レコードを作成/編集しようとすると、ログに次のエラーが記録されます。

ActiveModel::ForbiddenAttributes (ActiveModel::ForbiddenAttributes)
42
Gary S. Weaver
31
Joseph N.

最新の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
59
Brendon Muir

エンジンで定義されたリソースでは受け入れられた答えが機能しなかったので、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
19
Nick Urban

config/initializers/active_admin.rbで

config.before_filter do
  params.permit!
end
19
Manish Kasera

更新:これを行う最新の方法については、@ Brendon-Muirの回答を参照してください。以下の情報は以前は正しかったので、ActiveAdminの古いバージョンで他の人に役立つ場合に備えてここに残しておきます。

Googleグループスレッドでパッチが提案されていました: 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

6
Gary S. Weaver

次のように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
3
Davidslv