2017-02-16 4 views
0

Ich mache schon seit Jahren RoR, aber dies ist mein erstes Projekt mit Mongo (auch mein erstes api-only-Projekt). Ich habe eine schwere Zeit mit HABTM-Verbänden und ich vermute, dass es mit Params zu tun hat, aber ich bin mir nicht sicher, was ich sonst noch versuchen sollte.Mongoid 6, Schienen 5, HABTM "nicht zugelassener Parmeter"

Hier ist, was ich habe:

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 

In meinen Projekten Controller, ich habe diese für Parameter:

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

Und ja, ich habe auch versucht, {benutzerkennungen tun: [] }.

Wenn ich Postman verwenden, um eine URL-PUT-Anfrage zu erstellen, um Benutzer zu einem Projekt hinzuzufügen, erhalte ich einen Fehler "unerlaubter Parameter". Aber ... ich erlaube diesen Parameter, richtig?

Ich bin verrückt, weil ich nicht weiß, ob ich ein Mongo-Problem, ein Rails 5-Problem oder ein API-Problem habe. Alle anderen Anrufe funktionieren gut.

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 

Ich würde mich über Ideen freuen, was ich sonst noch versuchen könnte.

Antwort

1

verwenden sollen, aber ... ich erlaube, dass der Parameter, nicht wahr?

Nicht ganz. Sie erlauben user_ids als ein Array. Aber Sie senden es als Skalarwert. Dies ist genug Unterschied für starke Params, um die Daten nicht durchzulassen.

Entscheiden Sie sich und machen Sie entweder einen (erlauben Array und senden Array) oder den anderen (Skalar und Skalar zulassen).

+0

Ah! Mein Problem war nicht ein Schienenproblem, es war, dass ich nicht wirklich wusste, wie man Postman benutzt. Vielen Dank für Ihre Antwort, das hat es gelöst! :) – nilatti

0

Ich glaube, Sie devise_parameter_sanitizer.permit

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