0

我试图在更新对象之前从参数中删除一个属性,但我没有成功。

参数包含一个对象 Post,我想从中删除 image_url:

{
 "post" : "{
     \"content\" : \"dfsgdfa\",
     \"created_at\" : \"2013-09-01T08:39:26Z\",
     \"id\" : 21,
     \"image_content_type\" : \"image/jpeg\",
     \"image_file_name\" : \"img.jpg\",
     \"image_file_size\" : 61140,
     \"image_updated_at\" : \"2013-09-01T08:39:26Z\",
     \"title\" : \"sdsdsdd\",
     \"updated_at\" : \"2013-09-01T08:39:26Z\",
     \"user_id\" : 4,
     \"image_url\" : \"/system/posts/images/000/000/021/original/img.jpg?137802476
  \"}",
  "image" : "null",
  "action" : "update",
  "controller" : "posts",
  "id" : "21"
}

所以我确实喜欢这样:

params[:post].delete("image_url")

没有引发错误,但 image_url 仍在 params[:post] 中

我怎样才能删除它?

4

4 回答 4

0

params[:post]在您的情况下实际上是字符串。这不是哈希。这就是为什么它不起作用。

于 2013-09-02T12:41:48.273 回答
0

params[:post] 不是哈希,当您通过控制器检查它时,它看起来像哈希。它实际上是 ActiveSupport::HashWithIndifferentAccess 实例。

您不能使用 Hash#delete 从哈希中删除键/值对:您应该在保存回调之前编写

def delete_image_url
  params[:post].delete :image_url
end

我希望它会帮助你。我已经测试过了。

于 2013-09-02T14:25:08.100 回答
0

您可以将一个子集传递给您想要的任何函数:

@object = Foo.new(params.reject{|key,value| key == 'image_url'})

这不会完全从参数中删除它,而是返回没有该键的副本

于 2013-09-02T16:14:30.413 回答
-1

参数['post'].delete("image_url")

于 2013-09-02T12:45:57.713 回答