【问题标题】:Ruby On Rails - Remove attribute from modelRuby On Rails - 从模型中删除属性
【发布时间】:2013-09-03 00:14:30
【问题描述】:

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

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]

如何删除?

【问题讨论】:

  • 尝试拒绝而不是删除,您可能需要查找两种方法的文档。
  • 这既不是字符串也不是散列。它看起来像一个带有post 值的哈希字符串,但它是语法错误。帖子的最后一行应该是\"}, 而不是\"}", 请仔细检查并发布正确的数据。

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


【解决方案1】:

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

【讨论】:

  • 是的,我刚刚意识到,但我该如何改变呢?顺便说一句:如果 image_url 不在这里,它会很好地更新我的帖子对象
  • 我找到了另一种方式,JSON.parse :)
【解决方案2】:

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

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

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

希望对你有所帮助。我已经测试过了。

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 不工作也不行,就像说 vencislaf 帖子不是哈希而是字符串,但我不知道如何转换它
      猜你喜欢
      • 2011-10-09
      • 1970-01-01
      • 1970-01-01
      • 2013-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多