【问题标题】:Model serilize hash turned from hash to string when saving object保存对象时模型序列化哈希从哈希变为字符串
【发布时间】:2017-07-04 22:03:58
【问题描述】:

ruby 2.3.3, rails 3.2.22.5

嗨。我在User 模型中使用serialized :logs, Hash,当保存日志哈希时,它被检索为字符串而不是哈希。

它是如何发生的:

  1. 为日志哈希赋值
  2. 保存用户对象
  3. 现在日志哈希是一个字符串..

所以对于user,在给logs hash赋值时:user.logs[2] = 4,然后保存

class User < ActiveRecord::Base
  serialize :logs, Hash # in database it's a text type
end

rails 控制台中的示例:

# rails console
test_user_id = 3
user = User.find(test_user_id)
user.logs = {}
user.save

user.logs # => {} # great
User.find(test_user_id).logs # => {} # great
# now trying to add value and save:

# 1. assign value to logs hash
user.logs[Time.now] = {:field_id=>6} # => {:field_id=>6}
# 2. save user object:
user.save
# 3. now logs hash is a string..
user.logs
#=> "---\n2017-07-03 19:33:34.938364000 +03:00:\n  :field_id: 6\n" 
# why it turned to string ?!?!

User.find(test_user_id).logs # same here:
# => "---\n2017-07-03 19:33:34.938364000 +03:00:\n  :field_id: 6\n"

有什么想法吗?

【问题讨论】:

    标签: ruby-on-rails-3 serialization


    【解决方案1】:

    好的。所以(据我了解)Rails version: 3.2.22.5ruby 2.2.x 兼容,但与 ruby 2.3.x 不兼容

    所以通过从 ruby 2.3.3 恢复到 ruby 2.2.6 来修复它

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-28
      • 2016-08-09
      • 2013-10-03
      • 2014-09-04
      • 2016-04-26
      • 2021-12-23
      相关资源
      最近更新 更多