ruby-on-rails - HABTM 关联中不允许的参数
问题描述
我正在尝试has_and_belongs_to_many
在我的 Rails 5 应用程序中定义两个模型之间的关联(仅 API 以防万一)。模型是bags
and 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
谁能看到我在这里做错了什么?提前致谢!
编辑:我认为问题一定出在数据的发送方式上,但我仍然无法弄清楚。
解决方案
感谢您的确认,瓦西丽莎!我似乎无法让前端发送一个实际的数组,所以我最终将 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
推荐阅读
- c# - OpenCV 将位图转换为 Mat
- typescript - 限制从 3rd 方库导入 typescript 类型的成本?
- java - @Transactional 大大减慢了 Rest API
- sql - 我在哪里可以在 SSMS 表设计器模式下设置检查约束
- java - 引起:java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-2 at java.lang.String.substring(String.java:2036) at
- php - 加载 Laravel 视图时使用缓存版本的 MySQL 结果
- c# - 在列表视图中显示项目保持 x 秒的弹出窗口?
- python - 带有keras的CNN,准确性没有提高
- c# - Cosmos C# IL2CPU 调用时出错?
- c# - 将对象集合从控制器传递到查看 Asp.Net MVC