42

更新:この問題は、ActiveAdminに既に解決策がある前に尋ねられました。 Josephが述べているように、ActiveAdminのドキュメントにはこの情報が含まれていますが、ここでの回答は古いバージョンのActiveAdminを使用している人に提供されています。ActiveAdminをStrong Parametersで使用するにはどうすればよいですか?

使用しているモデルがStrongParametersを使用している場合strong_parameters 0.1.4を含むことによって、Railsの3.2.8にActiveAdmin 0.5.0で使用されている場合:

include ::ActiveModel::ForbiddenAttributesProtection 

その後、あなたは次のエラーを取得するにはログレコードを作成/編集しようとします

ActiveModel::ForbiddenAttributes (ActiveModel::ForbiddenAttributes) 

答えて

30

ActiveAdmin.register Blog do 
    #... 
    controller do 
    #... 
    def permitted_params 
     params.permit(:blog => [:name, :description]) 
     # params.permit! # allow all parameters 
    end 
    end 
end 
+0

(これが現在のバージョンのAAに対して正しかったことを示すように更新されました) –

+1

残念ながら、これはRails 3またはバージョン6.xでは利用できません。だから私はアクティブな管理者イニシャライザでこのメソッドにパッチを当てただけです。 – toxaq

6

更新:これを行うには、最新の方法のためのブレンドン・ミューアの答え@を参照してください。次の情報はこれまでのところ正しいので、古いバージョンの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 

コントローラを変更するには、アクティブな管理のドキュメントを参照してください:
http://activeadmin.info/docs/8-custom-actions.html#modify_the_controller

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 
59

最新inherited_resources宝石にアップデートして、コントローラブロックでこれを行う:あなたのconfig /初期化子/ active_admin.rb

config.before_filter do 
    params.permit! 
end 
+11

をあなたはすべてのパラメータを許可する場合は、あなたが 'params.permitを使用することができます(これはすべての後に、あなたの管理インタフェースです)'!。 –

+1

params.permitを作成する方法はありますか?グローバル...だから私はそれをすべてのActiveAdmin.registerファイルに入れる必要はありませんか? –

+0

申し訳ありません。 ActiveAdminフォーラムで質問するほうがいいかもしれません:) –

18

ドキュメント今はっきりとどのように述べて参照してください。参照:

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

+1

上記の私の最初の解決策のように、これは安全ではないことに注意する価値があります。私は上記のBrendon Muirのソリューションを上記のコントローラブロックのparamsを明示的に許可することをお勧めします。これはRails 4の関連ActiveAdminスレッドで数回述べられています(https://github.com/gregbell/active_admin/issues/1963)。 )。しかし、より多くの仕事がありますので、リスクとメリットを比較検討してください。 –

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 
関連する問題