我试图在更新对象之前从params中删除属性,但我没有成功。
Params包含一个对象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]
如何删除它?
答案 0 :(得分:0)
params[:post]
实际上是字符串。这不是哈希。这就是它无法正常工作的原因。
答案 1 :(得分:0)
params [:post]不是哈希值,当你通过控制器检查它时,它看起来像哈希。它实际上是ActiveSupport :: HashWithIndifferentAccess实例。
您无法使用Hash#delete从哈希中删除键/值对: 你应该在保存回调之前写一下
def delete_image_url
params[:post].delete :image_url
end
我希望它会对你有所帮助。我已经测试了它。
答案 2 :(得分:0)
您可以将子集传递给您想要的任何函数:
@object = Foo.new(params.reject{|key,value| key == 'image_url'})
这并不是完全从params中删除它,而是返回没有该键的副本
答案 3 :(得分:-1)
PARAMS [ '后']。删除( “IMAGE_URL”)