模型 serilize hash 在保存对象时从 hash 变成 string
Model serilize hash turned from hash to string when saving object
ruby 2.3.3
、rails 3.2.22.5
你好。我在 User
模型中使用 serialized :logs, Hash
,当保存日志散列时 - 之后它被检索为字符串而不是散列。
它是如何发生的:
- 为日志散列赋值
- 保存用户对象
- 现在日志哈希是一个字符串..
所以对于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"
有什么想法吗?
好的。所以(据我了解)Rails version: 3.2.22.5
与 ruby 2.2.x
兼容,但与 ruby 2.3.x
不兼容
所以通过从 ruby 2.3.3
恢复到 ruby 2.2.6
来修复它
ruby 2.3.3
、rails 3.2.22.5
你好。我在 User
模型中使用 serialized :logs, Hash
,当保存日志散列时 - 之后它被检索为字符串而不是散列。
它是如何发生的:
- 为日志散列赋值
- 保存用户对象
- 现在日志哈希是一个字符串..
所以对于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"
有什么想法吗?
好的。所以(据我了解)Rails version: 3.2.22.5
与 ruby 2.2.x
兼容,但与 ruby 2.3.x
所以通过从 ruby 2.3.3
恢复到 ruby 2.2.6