2017-02-16 15 views
0

Я занимаюсь RoR годами, но это мой первый проект с Mongo (также мой первый проект, основанный на api). У меня тяжелое время с ассоциациями HABTM, и я подозреваю, что это связано с параметрами, но я не уверен, что еще попробовать.Mongoid 6, Rails 5, HABTM «unpermitted parmeter»

Вот что я получил:

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 

В мой контроллер проектов, у меня есть это для параметров:

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

И да, я тоже пытался делать {user_ids: [] }.

Когда я использую Postman, чтобы сделать запрос URL PUT, чтобы попытаться добавить пользователей в проект, я получаю сообщение об ошибке «unpermitted parameter». Но ... Я разрешаю этот параметр, правильно?

Я как бы схожу с ума, потому что не знаю, есть ли у меня проблема Монго, проблема с Rails 5 или проблема API. Все остальные звонки работают нормально.

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 

Буду признателен за любые идеи о том, что еще я могу попробовать.

ответ

1

Но ... Я разрешение этого параметра, не так ли?

Не совсем. Вы разрешаете user_ids как массив. Но вы отправляете его как скалярное значение. Это достаточно для сильных параметров, чтобы не пропускать данные.

Решите и сделайте одно (разрешите массив и отправьте массив) или другое (разрешите скаляр и отправьте скаляр).

+0

Ах! Моя проблема не была проблемой рельсов, я не знал, как использовать Postman. Спасибо за ваш ответ, который решил! :) – nilatti

0

Я думаю, вы должны использовать devise_parameter_sanitizer.permit

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

 Смежные вопросы

  • Нет связанных вопросов^_^