Mongoid 6,Rails 5,HABTM "unpermitted parmeter"
Mongoid 6, Rails 5, HABTM "unpermitted parmeter"
我从事 RoR 多年,但这是我与 Mongo 的第一个项目(也是我的第一个 api-only 项目)。我在 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 发出 URL PUT 请求以尝试将用户添加到项目时,我收到 "unpermitted parameter" 错误。但是...我允许该参数,对吗?
我快要疯了,因为我不知道自己是遇到 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
对于我还可以尝试的任何想法,我将不胜感激。
我认为你应该使用 devise_parameter_sanitizer.permit
devise_parameter_sanitizer.permit(:id, :name, :start_date, :target_date, :description, keys: [:username])
But ... I'm permitting that parameter, right?
不完全是。您允许 user_ids
作为数组。但是您将其作为标量值发送。这足以让强大的参数不让数据通过。
下定决心执行其中一个(允许数组并发送数组)或另一个(允许标量并发送标量)。
我从事 RoR 多年,但这是我与 Mongo 的第一个项目(也是我的第一个 api-only 项目)。我在 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 发出 URL PUT 请求以尝试将用户添加到项目时,我收到 "unpermitted parameter" 错误。但是...我允许该参数,对吗?
我快要疯了,因为我不知道自己是遇到 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
对于我还可以尝试的任何想法,我将不胜感激。
我认为你应该使用 devise_parameter_sanitizer.permit
devise_parameter_sanitizer.permit(:id, :name, :start_date, :target_date, :description, keys: [:username])
But ... I'm permitting that parameter, right?
不完全是。您允许 user_ids
作为数组。但是您将其作为标量值发送。这足以让强大的参数不让数据通过。
下定决心执行其中一个(允许数组并发送数组)或另一个(允许标量并发送标量)。