2017-02-16 1 views
0

Je fais du RoR depuis des années, mais c'est mon premier projet avec Mongo (aussi mon premier projet sur api). Je vais avoir du mal avec les associations HABTM et je pense que ça a à voir avec les params, mais je ne sais pas quoi faire d'autre.Mongoid 6, Rails 5, HABTM "parmeter non autorisé"

Voici ce que j'ai:

class Project 
    include Mongoid::Document 
    field :name, type: String 
    field :start_date, type: Date 
    field :target_date, type: Date 

    has_and_belongs_to_many :users 
end 

class User 
    include Mongoid::Document 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable, 
     :jwt_authenticatable, jwt_revocation_strategy: JWTBlacklist 

    field :email,    type: String 
    field :_id, type: String, default: ->{ email } 
    { ... devise stuff ...} 
    has_and_belongs_to_many :projects 
end 

Dans mon contrôleur de projets, je présente des paramètres:

def project_params 
     params.permit(:id, :name, :start_date, :target_date, :description, user_ids: []) 
    end 

Et oui, je l'ai aussi essayé de faire {user_ids: [] } Lorsque j'utilise Postman pour faire une requête URL PUT pour tenter d'ajouter des utilisateurs à un projet, j'obtiens une erreur "paramètre non autorisé". Mais ... je permets ce paramètre, non? Je suis un peu folle parce que je ne sais pas si j'ai un problème de Mongo, un problème de Rails 5, ou un problème d'API. Tous les autres appels fonctionnent bien.

Started PUT "/rapi/projects/3" for 127.0.0.1 at 2017-02-15 22:55:10 -0500 
Overwriting existing field _id in class JWTBlacklist. 
Overwriting existing field _id in class User. 
Processing by Api::V1::ProjectsController#update as JSON 
    Parameters: {"user_ids"=>"[email protected]", "id"=>"3"} 
MONGODB | localhost:27017 | anthem.find | STARTED | {"find"=>"users", "filter"=>{"_id"=>"[email protected]"}} 
MONGODB | localhost:27017 | anthem.find | SUCCEEDED | 0.000363703s 
Overwriting existing field _id in class Project. 
MONGODB | localhost:27017 | anthem.find | STARTED | {"find"=>"projects", "filter"=>{"_id"=>"3"}} 
MONGODB | localhost:27017 | anthem.find | SUCCEEDED | 0.000244022s 
Unpermitted parameters: user_ids, format 
Overwriting existing field _id in class Release. 
Completed 204 No Content in 20ms 

J'apprécierais des idées sur quoi d'autre que je pourrais essayer.

Répondre

1

Mais ... Je le permet ce paramètre, non?

Pas tout à fait. Vous autorisez user_ids en tant que tableau. Mais vous l'envoyez en valeur scalaire. C'est assez de différence pour les params forts pour ne pas laisser passer les données.

Décidez-vous et faites-en une (autoriser tableau et envoyer tableau) ou l'autre (permettre scalaire et envoyer scalaire).

+0

Ah! Mon problème n'était pas un problème de rails, c'était que je ne savais pas vraiment comment utiliser Postman. Merci pour votre réponse, qui l'a résolu! :) – nilatti

0

Je pense que vous devriez utiliser devise_parameter_sanitizer.permit

devise_parameter_sanitizer.permit(:id, :name, :start_date, :target_date, :description, keys: [:username])