我在一个serialize
模型中使用ActiveRecord
将Array
个简单哈希序列化为文本数据库字段。我甚至使用第二个参数将反序列化强制转换为Array
s。
class Shop < ActiveRecord::Base
serialize : recipients, Array
end
它似乎工作正常,但在一些请求之后,recipients
的内容变为HashOfIndifferentAccess
哈希而不是数组。这只发生在重新加载一些模型之后,我无法在测试或控制台中重现它,只能在生产环境中重现。
答案 0 :(得分:2)
我的一个Rails 3.1应用程序中的一些序列化字段遇到了同样的问题。经过大量的故障排除后,我将其缩小为字符编码问题。我无法在本地重现它,因为我使用的是SQLite,而我的生产环境是在Postgres上。
尝试在序列化之前对所有值应用some_field.force_encoding(Encoding::UTF_8)
,看看会发生什么。
答案 1 :(得分:1)
这似乎是你应该能够通过足够的测试在本地重现的东西。 查看生产数据库和日志,并尝试在本地测试中使用相同的数据。
hashwithindifferentaccess来自控制器。也许你是直接从控制器获取数据而不是按摩它。
创建页面,控制器和模型保存代码的要点,并更新此问题。 根据您的哈希嵌套的深度,您可以在保存之前将HWIA哈希转换为常规哈希。
不应该太难调试和解决。