【问题标题】:Mongoid 6, Rails 5, HABTM "unpermitted parmeter"Mongoid 6、Rails 5、HABTM“未经许可的参数”
【发布时间】:2017-02-16 04:08:11
【问题描述】:

多年来我一直在做 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 请求以尝试将用户添加到项目时,我收到“未允许的参数”错误。但是……我允许那个参数,对吧?

我有点发疯了,因为我不知道我是否遇到了 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

如果有任何关于我可以尝试的想法,我将不胜感激。

【问题讨论】:

    标签: mongodb ruby-on-rails-5 rails-api mongoid6


    【解决方案1】:

    但是……我允许那个参数,对吧?

    不完全是。您允许 user_ids 作为数组。但是您将其作为标量值发送。这足以让强参数不让数据通过。

    下定决心,做一个(允许数组和发送数组)或另一个(允许标量和发送标量)。

    【讨论】:

    • 啊!我的问题不是 Rails 问题,而是我真的不知道如何使用 Postman。谢谢你的回复,解决了! :)
    【解决方案2】:

    我认为你应该使用 devise_parameter_sanitizer.permit

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

    【讨论】:

      猜你喜欢
      • 2021-05-03
      • 1970-01-01
      • 1970-01-01
      • 2017-10-29
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多