4
non autorisée est

UsersProfileController a params fortes qui ressemble à ceci:Params forts: params.permit renvoie les paramètres en dépit whitelist

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

La création des compositions d'action UserProfile par un parent (a-un et appartient à l'association)

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

params Appel dans les déclarations de UserProfiles:

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

Appel user_profile_params, renvoie ceci:

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

Lorsqu'une demande de poste arrive, je me attendre à être en mesure de créer user_profile en utilisant les paramètres dans la liste blanche user_profile_params. Au lieu de cela, l'action create dans UserProfiles échoue avec l'erreur: Unpermitted parameters: subdomain, format.

Ce n'est pas ce à quoi je m'attendais. Je m'attendais à ce que user_profile_params inclue seulement les valeurs permises et ignore tous les autres.

Je pourrais ajouter :format et :subdomain à la liste des attributs autorisés, mais quelque chose semble un peu à ce sujet.

Quelqu'un peut-il expliquer ce qui se passe ou ce qui me manque?

+0

Il me semble que vous ne passez pas réellement ce bloc de création dans votre UsersProfileController. –

+0

@ChrisMoody: Je ne suis pas sûr de comprendre ce que vous voulez dire. Si vous voulez dire que la méthode n'est pas appelée, alors ce n'est pas vrai. A pu entrer dans l'action 'create' dans le UsersProfileController et trouvé que l'erreur se produisait quand' user_profile_params' est appelé sur cette ligne spécifique 'parent.build_user_profile (user_profile_params)'. Pouvez-vous expliquer ce que vous voulez dire? – Uzzar

Répondre

3

Ce message est juste un avertissement, et non une erreur /exception. Si votre modèle n'est pas persistant, c'est pour une autre raison.

De l'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.

Vous pouvez simuler dans votre console (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? 

Comme vous pouvez le voir, ce message n'est pas jeté par la User.create, mais quand .permit est invoqué.

+1

Vous avez raison. Je venais de poster que l'erreur était due à la validation sur le modèle 'User'. Merci d'avoir pris le temps de répondre :) – Uzzar

+0

@Uzzar vous êtes les bienvenus! Bonne chance pour votre projet – mrlew