42

Aggiornamento: questa domanda è stata chiesta prima che esistesse già una soluzione in ActiveAdmin. Come afferma Joseph, la documentazione ActiveAdmin contiene ora queste informazioni, ma le risposte qui fornite sono fornite per coloro che lavorano con versioni precedenti di ActiveAdmin.Come attivare ActiveAdmin per lavorare con parametri forti?

Quando i strong_parameters 0.1.4 viene utilizzato con ActiveAdmin 0.5.0 in Rails 3.2.8, se il modello si sta utilizzando è usando StrongParameters includendo:

include ::ActiveModel::ForbiddenAttributesProtection 

poi si ottiene il seguente errore nel il registro, se si tenta di creare/modificare un record:

ActiveModel::ForbiddenAttributes (ActiveModel::ForbiddenAttributes) 

risposta

30

La documentazione afferma chiaramente come andare su Impostazione di parametri forti in Rails 4. Vedi:

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

+0

(aggiornato per mostrare che questa è la risposta corretta per la versione corrente di AA.) –

+1

Sfortunatamente questo non è disponibile su Rails 3 o versioni 6.x. Quindi ho appena modificato il metodo nell'inizializzatore di amministrazione attivo. – toxaq

6

Update: Vedere @ risposta di Brendon-Muir per l'ultimo modo per farlo. Le seguenti informazioni erano corrette in precedenza, quindi la lascio qui nel caso in cui aiuti gli altri con una versione precedente di ActiveAdmin.

Una patch era stata proposta in un thread gruppo google: https://groups.google.com/forum/?fromgroups=#!topic/activeadmin/XD3W9QNbB8I

Poi veniva messo insieme qui: https://github.com/gregbell/active_admin/issues/1731

Ma per ora, il modo meno invasivo per aggiungere parametri forte sostegno ActiveAdmin nella tua app devi ridefinire resource_params nel tuo blocco controller, sia tramite il metodo "allow all params", che è meno sicuro:

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

o il modo esplicito più sicuro:

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

vedi Documentazione Admin attivi sui controller di modifica:
http://activeadmin.info/docs/8-custom-actions.html#modify_the_controller

19

La risposta accettata non ha funzionato per me con risorse definite in un motore, così ho rintracciato il resource_params originale in inherited_resources/lib/inherited_resources/base_helpers.rb e ha trovato questa soluzione che imita più vicino quel codice e che funziona con i motori:

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

l'aggiornamento all'ultima inherited_resources gemma e farlo nel blocco di controllo:

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

Se si desidera consentire tutti i parametri (questa è la tua interfaccia di amministrazione, dopo tutto) è possibile utilizzare '' params.permit!. –

+1

C'è un modo per rendere params.permit! globale .... cioè. quindi non devo metterlo in ogni file ActiveAdmin.register? –

+0

Non sono sicuro che mi dispiace. Potrebbe essere meglio chiedere nel forum ActiveAdmin (se ce n'è uno? Non riesco a ricordare) :) –

18

nei vostri config/inizializzatori/active_admin.rb

config.before_filter do 
    params.permit! 
end 
+1

Come la mia prima soluzione sopra, vale la pena notare che non è così sicuro. Suggerirei la soluzione di Brendon Muir di sopra per consentire esplicitamente i parametri nel blocco controller, che è menzionato alcune volte nel thread ActiveAdmin correlato per Rails 4 [qui] (https://github.com/gregbell/active_admin/issues/1963). È più lavoro, però, in modo da pesare i rischi contro i benefici. –

3

È inoltre possibile utilizzare permit_params come segue:

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