42

Update: Diese Frage wurde gestellt, bevor es bereits in ActiveAdmin eine Lösung dafür gab. Wie Joseph sagt, enthält die ActiveAdmin-Dokumentation jetzt diese Informationen, aber die Antworten hier sind für diejenigen, die mit älteren Versionen von ActiveAdmin arbeiten.Wie bekomme ich ActiveAdmin um mit starken Parametern zu arbeiten?

Wenn die strong_parameters 0.1.4 mit ActiveAdmin verwendet wird 0.5.0 in Rails 3.2.8, wenn das Modell den Sie verwenden, ist StrongParameters, indem mit:

include ::ActiveModel::ForbiddenAttributesProtection 

dann erhalten Sie den folgenden Fehler in wenn Sie das Protokoll versuchen, einen Datensatz zu erstellen/bearbeiten:

ActiveModel::ForbiddenAttributes (ActiveModel::ForbiddenAttributes) 

Antwort

30

Die Dokumentation nun eindeutig fest, wie Gehen Sie zum Einrichten starker Parameter in Rails 4 vor. Siehe:

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

+0

(Aktualisiert, um zu zeigen, dass dies die richtige Antwort für die aktuelle Version von AA ist.) –

+1

Leider ist dies auf Rails 3 oder Versionen 6.x nicht verfügbar. Also habe ich einfach die Methode im aktiven Admin-Initialisierer gepatcht. – toxaq

6

Update: Siehe @ Brendon-Muir Antwort für neueste Art und Weise, dies zu tun. Die folgenden Informationen waren zuvor korrekt, daher werde ich sie hier belassen, falls sie anderen mit einer älteren Version von ActiveAdmin helfen.

Ein Patch in einem Google-Gruppe Thread vorgeschlagen worden ist: https://groups.google.com/forum/?fromgroups=#!topic/activeadmin/XD3W9QNbB8I

Dann zusammen wurde hier setzen: https://github.com/gregbell/active_admin/issues/1731

Aber jetzt, die am wenigsten invasive Art und Weise starke Parameter ActiveAdmin unterstützen hinzufügen In Ihrer App definieren Sie resource_params in Ihrem Controller-Block entweder über die Methode "permit all params", die weniger sicher ist:

controller do 
    def resource_params 
    return [] if request.get? 
    [ params[active_admin_config.resource_class.name.underscore.to_sym].permit! ] 
    end 
end 

oder die sicherere explizite Weise:

controller do 
    def resource_params 
    return [] if request.get? 
    [ params.require(:name_of_model).permit(:each,:param,:goes,:here,:if,:you,:want) ] 
    end 
end 

Aktive Admin docs auf Modifizieren Controller Siehe:
http://activeadmin.info/docs/8-custom-actions.html#modify_the_controller

19

Die akzeptierte Antwort für mich nicht mit Ressourcen in einem Motor definiert arbeiten, so verfolgen Ich das ursprüngliche resource_params in geerbten_ressourcen/lib/geerbten_ressourcen/base_helpers.rb und kam mit dieser Lösung, die diesen Code näher nachahmt, und die mit Motoren funktioniert:

In 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

Update auf das neueste inherited_resources Juwel und tut dies in Ihrem Controller-Baustein:

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

Wenn Sie alle Parameter zulassen möchten (dies ist Ihre Admin-Interface, nachdem alle) Sie können 'params.permit verwenden'!. –

+1

Gibt es eine Möglichkeit, params.permit zu machen! global .... d. also muss ich es nicht in jede ActiveAdmin.register-Datei schreiben? –

+0

Ich bin mir nicht sicher, Entschuldigung. Es ist vielleicht besser, im ActiveAdmin-Forum zu fragen (wenn es eines gibt? Ich kann mich nicht ganz erinnern) :) –

18

in Ihrer config/initializers/active_admin.rb

config.before_filter do 
    params.permit! 
end 
+1

Wie meine erste Lösung oben, ist es erwähnenswert, dass dies nicht so sicher ist. Ich würde die obige Lösung von Brendon Muir empfehlen, um explizit Params im Controller-Block zuzulassen, der einige Male im zugehörigen ActiveAdmin-Thread für Rails 4 [hier] erwähnt wird (https://github.com/gregbell/active_admin/issues/1963)). Es ist jedoch mehr Arbeit, also wägen Sie Risiken und Nutzen ab. –

3

Sie können auch permit_params wie folgt verwenden:

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