Ruby On Rails - 从模型中删除属性

时间:2013-09-02 12:26:48

标签: ruby-on-rails ruby activerecord attributes updatemodel

我试图在更新对象之前从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]

如何删除它?

4 个答案:

答案 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”)