4

UsersProfileController hat starke params, die wie so aussehen:Starke Params: params.permit Unzulässige Parameter trotz weißer Liste gibt

def user_profile_params 
     params.permit(:age, :relations) 
     # yes, I am not requiring user_profile. Just permitting attributes I need. 
    end 

Die Aktion erstellen bauen Userprofile durch einen Elternteil (hat-eine und gehört zu Verein)

def create 
     parent = Parent.create_guest 
     parent.build_user_profile(user_profile_params) 
     if parent.save 
     # do something 
     else 
     # handle error 
     end 
    end 

Aufruf params in Userprofiles kehrt:

<ActionController::Parameters 
     {"age"=>"23", 
     "relations"=>"3", 
     "subdomain"=>"api", 
     "format"=>:json, 
     "controller"=>"api/v1/user_profiles", 
     "action"=>"create"} 
    permitted: false> 

user_profile_params aufrufen, gibt diese:

user_profile_params: 
     Unpermitted parameters: subdomain, format 
     <ActionController::Parameters 
     {"age"=>"23", 
     "relations"=>"3", } 
     permitted: true> 

Wenn eine Post-Anforderung kommt, erwarte ich die weißen Liste params in user_profile_params erstellen können user_profile verwenden. Stattdessen schlägt die create Aktion in UserProfiles mit Fehler fehl: Unpermitted parameters: subdomain, format.

Dies ist nicht, was ich erwartet habe. Ich habe erwartet, dass user_profile_params nur die zulässigen Werte enthält und alle anderen ignoriert.

Ich könnte hinzufügen :format und :subdomain Liste der zulässigen Attribute, aber etwas fühlt sich ein bisschen davon an.

Kann jemand erklären, was vor sich geht/was ich vermisse?

+0

Es scheint mir, dass Sie diesen create-Block in Ihrem UsersProfileController nicht wirklich durchlaufen. –

+0

@ChrisMoody: Nicht sicher, ich verstehe, was du meinst. Wenn Sie meinen, dass die Methode nicht aufgerufen wird, dann ist das nicht wahr. War in der Lage, in der UsersProfileController in die 'create' Aktion zu treten und stellte fest, dass ein Fehler auftritt, wenn' user_profile_params' in dieser speziellen Zeile 'parent.build_user_profile (user_profile_params)' aufgerufen wird. Kannst du erklären, was du meinst? – Uzzar

Antwort

3

Diese Nachricht ist nur eine Warnung, und keine Fehler/Ausnahme. Wenn Ihr Modell nicht beibehalten wird, liegt das an einem anderen Grund.

Vom strong parameters docs:

Handling of Unpermitted Keys

By default parameter keys that are not explicitly permitted will be logged in the development and test environment. In other environments these parameters will simply be filtered out and ignored.

Additionally, this behaviour can be changed by changing the config.action_controller.action_on_unpermitted_parameters property in your environment files. If set to :log the unpermitted attributes will be logged, if set to :raise an exception will be raised.

Sie können es in Ihrer Konsole simulieren (rails c):

fake_params_hash = { 
    "age"=>"23", 
    "relations"=>"3", 
    "subdomain"=>"api", 
    "format"=>:json, 
    "controller"=>"api/v1/user_profiles", 
    "action"=>"create" 
} 

permited_params = ActionController::Parameters.new(fake_params_hash).permit(:age, :relations) 
#=> Unpermitted parameters: subdomain, format <== warning logged to the console 
#=> <ActionController::Parameters {"age"=>"23", "relations"=>"3"} permitted: true> 


user = User.create(permited_params) #mass assigment with permited params 

#check if there are errors 
puts user.errors.messages if user.errors.any? 

Wie Sie sehen können, wird diese Meldung nicht vom User.create geworfen, aber wenn .permit wird aufgerufen.

+1

Sie haben Recht. War tatsächlich gekommen, um zu schreiben, dass der Fehler wegen der Bestätigung auf 'Benutzer' Modell war. Danke, dass du dir Zeit genommen hast, um zu antworten :) – Uzzar

+0

@Uzzar du bist willkommen! viel Glück mit Ihrem Projekt – mrlew

Verwandte Themen