【问题标题】:How do I send an empty array through a PUT request via HTTParty?如何通过 HTTParty 通过 PUT 请求发送空数组?
【发布时间】:2013-03-14 01:06:39
【问题描述】:

我有一个 Photo 类,它有一个“name”属性和一个“tags”属性。我的目标是在 Rails 中实现一个更新功能,用输入的任何内容替换照片的标签。例如,如果我尝试 PUT 一个将“标签”设置为 [] 的 JSON 对象,我希望从照片中清除所有标签。

但是,当我通过 HTTParty 提交一个空数组作为正文参数之一时,我相信 HTTParty 正在将 [] 转换为 nil。因此,我的 Rails 后端上的 photos#update 端点没有接收到参数“tags”的任何信息。我正在寻找一种让 HTTParty 不将 [] 转换为 nil 的方法,因为我无法从照片中删除标签。

【问题讨论】:

  • 这一切都解决了吗?我遇到了同样的问题。

标签: ruby-on-rails ruby httparty


【解决方案1】:

这是 Rails 4 中的一个错误/功能,您可以在以下位置阅读有关该剧的更多信息:https://github.com/rails/rails/issues/13420

您的选择包括:

  • 类似于@mkk 的回答的一次性破解
  • 升级到 Rails 5
  • 在任何地方禁用deep_munge,并处理其后果:

>

# config/application.rb
config.action_dispatch.perform_deep_munge = false

【讨论】:

  • P.S.澄清一下——这不是 HTTParty 的真正问题,出于安全原因,这是您的 Rails 后端将[] 转换为nil 的问题。
【解决方案2】:

只需将空数组分配给params,例如:

params[:photo][:tags] ||= []

如果 params[:photo][:tags] 尚未设置,它将分配空数组。如果它不起作用,则意味着您必须调整键,例如您可能没有:tags,但是:tag_ids,那么您将不得不编写params[:photo][:tags]。只需检查您的 HTML 结构(您可以随时将其粘贴在这里,我可以帮助您]。据我所知,这是标准方法 :)

【讨论】:

  • 问题是如何绕过空数组到nil参数的httparty转换。
  • @Mohanraj 这就是你处理这个问题的方式。如果没有发送任何内容 [即nil 而不是空数组],您只需手动设置它。很抱歉,这不能满足您的需求,但我相信这是正确的答案(或者更确切地说:解决方法)。
  • 不,当我们在 httparty 请求中设置 params[:photo][:tags] ||= [] 时,我绝对没有收到 params[:photo][:tags] => nil as好吧。
  • @Mohanraj 这不是问题。这是问题所在。 object 属于 category,在 UI 中有很多复选框。假设您正在进行编辑操作,一些复选框被选中。问题是,如果您取消选中所有复选框并提交表单,则表示对象所属类别集的参数是nil,而不是[],因此您的操作将被忽略并且不会发生任何变化。解决方法是在控制器中手动将此参数设置为[],如果它是nil。这样对象将被正确更新并且不属于任何类别。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-05
  • 2018-04-09
相关资源
最近更新 更多