Mongoid 6, Rails 5, HABTM "недопустимый параметр"

Я занимался RoR в течение многих лет, но это мой первый проект с Mongo (также мой первый проект только для API). У меня тяжелые времена с ассоциациями HABTM, и я подозреваю, что это связано с параметрами, но я не уверен, что еще можно попробовать.

Вот что у меня есть:

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 для выполнения запроса PUT URL-адреса, чтобы попытаться добавить пользователей в проект, я получаю ошибку "unpermitted параметр". Но... я разрешаю этот параметр, верно?

Я схожу с ума, потому что не знаю, есть ли у меня проблема с Mongo, проблема с 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"=>"test@gmail.com", "id"=>"3"}
MONGODB | localhost:27017 | anthem.find | STARTED | {"find"=>"users", "filter"=>{"_id"=>"test@gmail.com"}}
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

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

2 ответа

Решение

Но... я разрешаю этот параметр, верно?

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

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

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

devise_parameter_sanitizer.permit(:id, :name, :start_date, :target_date, :description, keys: [:username])
Другие вопросы по тегам