42

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

Rails3.2.8のActiveAdmin0.5.0でstrong_parameters0.1.4が使用されている場合、使用しているモデルが次のものを含めてStrongParametersを使用している場合。

include ::ActiveModel::ForbiddenAttributesProtection

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

ActiveModel::ForbiddenAttributes (ActiveModel::ForbiddenAttributes)
4

6 に答える 6

60

最新のinherited_resourcesgemに更新し、コントローラーブロックでこれを行います。

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

ドキュメントには、Rails4で強力なパラメーターを設定する方法が明確に記載されています。以下を参照してください。

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

于 2013-11-29T11:50:27.227 に答える
19

受け入れられた答えは、エンジンで定義されたリソースでは機能しませんでした。そのため、inherited_resources / lib / internaled_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で他の人に役立つ場合に備えて、ここに残しておきます。

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