首页 > 解决方案 > HABTM 关联中不允许的参数

问题描述

我正在尝试has_and_belongs_to_many在我的 Rails 5 应用程序中定义两个模型之间的关联(仅 API 以防万一)。模型是bagsand products,并且关联在控制台中按预期工作 - 我可以键入Bag.last.update(product_ids: [1,2,5])并创建关联。但是,当尝试通过 API 控制器发送数据时,我得到Unpermitted parameter: :product_ids.

我已经阅读了我能找到的所有其他答案,并尝试实施这些解决方案,但我就是无法让它发挥作用。这是相关的代码。让我知道是否还有其他帮助。

bag.rb

class Bag < ApplicationRecord
  has_and_belongs_to_many :products
end
product.rb

class Product < ApplicationRecord
  has_and_belongs_to_many :bags
end
bags_controller.rb

def bag_params
        params.require(:bag).permit(:param1,
                                    :param2,
                                    :param3,
                                    :param4,
                                    product_ids: [])
end

这是服务器输出:

Processing by Api::V1::BagsController#update as JSON
  Parameters: {"bag"=>{"product_ids"=>"[1,2]"}, "id"=>"3"}
  User Load (1.7ms)  ...
  Bag Load (1.4ms)  ...
  CACHE User Load (0.2ms)...
  ...
Unpermitted parameter: :product_ids

谁能看到我在这里做错了什么?提前致谢!

编辑:我认为问题一定出在数据的发送方式上,但我仍然无法弄清楚。

标签: ruby-on-railsruby-on-rails-5has-and-belongs-to-many

解决方案


感谢您的确认,瓦西丽莎!我似乎无法让前端发送一个实际的数组,所以我最终将 bag_params 更改为这个,如果发送一个简单的逗号分隔字符串,它就可以工作:

attrs = params.require(:bag).permit(:appointment_id,
                                    :recipient_name,
                                    :package_id,
                                    :price,
                                    :product_ids)

attrs.merge!(product_ids: params[:bag][:product_ids].split(","))
attrs

推荐阅读