2013-03-14 74 views
6

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

但是,当我通过HTTParty提交一个空数组作为主体参数之一时,我相信HTTParty正在将[]转换为nil。因此,我的Rails后端上的照片#更新端点没有收到参数“标签”的任何内容。我正在寻找一种方法让HTTParty不会将[]转换为零,因为我失去了从照片中删除标签的能力。

+0

了这所有的解决呢?我遇到了同样的问题。 – Nate 2016-04-22 18:45:29

回答

-1

只是分配空数组参数,可以为例如:[:相片] [:标签]尚未设置,

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

如果PARAMS它将分配空数组。如果它不起作用,这意味着你必须调整键,例如也许你没有:tags,但是:tag_ids,那么你将不得不编写params [:photo] [:tags]。只要检查一下你的HTML结构(你可以随时粘贴在这里,我可以帮你)。据我所知这是标准方法:)

+0

问题是如何绕过空数组的httparty转换为零参数。 – Mohanraj 2014-05-06 11:25:34

+0

@Mohanraj这就是你如何处理这个问题。如果没有发送任何内容[即''nil''而不是空数组],则只需手动设置即可。对不起,这并不能满足您的需求,但我相信这是正确的答案(或者说:解决方法)。 – mkk 2014-05-06 14:49:16

+0

不,当我们设定 params [:photo] [:tags] || = [] 在httparty请求中,绝对我没有收到params [:photo] [:tags] => nil。 – Mohanraj 2014-05-06 17:52:38

1

这是Rails 4中的一个bug /功能,你可以阅读更多关于该剧在:https://github.com/rails/rails/issues/13420

选项包括:

  • 一次性破解类似于@ MKK的回答
  • 升级到Rails的5
  • 禁用deep_munge无处不在,处理的那后果:

>

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

P.S.澄清 - 这对于HTTParty来说并不是真正的问题,出于安全原因,这是您的Rails后端将'']'转换为'nil'的问题。 – Meekohi 2017-01-31 21:01:57