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])