42

Aktualizacja: to pytanie zostało zadane, zanim było już rozwiązanie dla niego w ActiveAdmin. Jak stwierdza Joseph, dokumentacja ActiveAdmin zawiera teraz te informacje, ale odpowiedzi tutaj są dostępne dla osób pracujących ze starszymi wersjami ActiveAdmin.Jak aktywować ActiveAdmin przy silnych parametrach?

Kiedy strong_parameters 0.1.4 jest używany z ActiveAdmin 0.5.0 w Rails 3.2.8, jeżeli model używasz korzysta StrongParameters o tym:

include ::ActiveModel::ForbiddenAttributesProtection 

wtedy pojawia się następujący błąd w dziennik, jeśli starają się tworzyć/edytować rejestr:

ActiveModel::ForbiddenAttributes (ActiveModel::ForbiddenAttributes) 

Odpowiedz

30

Dokumentacja teraz wyraźnie stwierdza, w jaki sposób przejść do Konfigurowanie silnych parametrów w szynach 4. Zobacz:

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

+0

(Zaktualizowany, aby pokazać, że jest to teraz poprawna odpowiedź dla bieżącej wersji AA). –

+1

Niestety nie jest to dostępne w Railsach 3 lub 6.x. Więc właśnie małpa załatała tę metodę w aktywnym inicjatorze administracyjnym. – toxaq

6

Aktualizacja: Zobacz @ odpowiedź Brendon-Muira za najnowszymi sposób to zrobić. Poniższe informacje były poprawne wcześniej, więc zostawię to tutaj, na wypadek, gdyby pomógł innym ze starszą wersją ActiveAdmin.

Plaster został zaproponowany w wątku grupy dyskusyjne: https://groups.google.com/forum/?fromgroups=#!topic/activeadmin/XD3W9QNbB8I

Potem była ułożyła tutaj: https://github.com/gregbell/active_admin/issues/1731

Ale teraz, najmniej inwazyjny sposób, aby dodać mocne parametry obsługują do ActiveAdmin w twojej aplikacji jest ponowne zdefiniowanie parametrów resource_params w twoim bloku kontrolera, albo za pomocą metody "zezwalaj na wszystkie params", która jest mniej bezpieczna:

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

lub bardziej bezpieczne wyraźny sposób:

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

Zobacz Całość docs administratora na modyfikowanie regulatorów:
http://activeadmin.info/docs/8-custom-actions.html#modify_the_controller

19

Przyjęte rozwiązanie nie działa dla mnie z zasobów określonych w silniku, więc wytropił oryginalny resource_params inherited_resources/lib/inherited_resources/base_helpers.rb i wymyślił to rozwiązanie, które bliżej naśladuje ten kod, i który działa z silnikami:

W 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

Aktualizacja do najnowszej inherited_resources gem i zrobić to w bloku regulatora:

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

Jeśli chcesz, aby wszystkie parametry (jest to interfejs administracyjny po wszystkich) można użyć 'params.permit'!. –

+1

Czy istnieje sposób tworzenia params.permit! globalne .... tj. więc nie muszę umieszczać go w każdym pliku ActiveAdmin.register? –

+0

Nie jestem pewna, przepraszam. Może lepiej byłoby zapytać na forum ActiveAdmin (jeśli istnieje? Nie pamiętam) :) –

18

w config/inicjalizatorów/active_admin.rb

config.before_filter do 
    params.permit! 
end 
+1

Podobnie jak moje pierwsze rozwiązanie powyżej, warto zauważyć, że nie jest to tak bezpieczne. Polecam powyższe rozwiązanie Brendona Muira, aby jawnie zezwolić na params w bloku kontrolera, który jest wspomniany kilka razy w powiązanym wątku ActiveAdmin dla Rails 4 [tutaj] (https://github.com/gregbell/active_admin/issues/1963). To więcej pracy, więc zważ ryzyko i korzyści. –

3

Można również użyć permit_params następująco:

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 
Powiązane problemy