2008-10-02 63 views
3

我在一个ActiveRecord模型中使用serialize来将简单哈希的Array序列化到文本数据库字段中。我甚至使用第二个参数来强制将反序列化转换为Array s。为什么ActiveRecord的序列化会随机破坏我的数据?

class Shop < ActiveRecord::Base 
    serialize : recipients, Array 
end 

这似乎很好地工作,但几个请求后,recipients内容变成HashOfIndifferentAccess哈希值,而不是数组。这只发生在几次重新加载模型后,我无法在测试或控制台中重现它,只能在生产环境中重现。

+1

什么版本的红宝石和AR – 2008-10-02 15:52:15

回答

1

这似乎是你应该能够在本地进行足够的测试重现的东西。 查看您的生产数据库和日志,并尝试在本地测试中使用相同的数据。

hashwithindifferentaccess来自控制器。也许你是直接从控制器获取数据,而不是按摩它。

创建您的页面,控制器和模型保存代码的要点,并更新此问题。 根据散列的深度有多深,可以在保存之前将HWIA散列转换为常规散列。

不应该太难调试和解决。

2

我在我的一个Rails 3.1应用程序中遇到了一些序列化字段的问题。经过很多故障排除后,我将其缩小为字符编码问题。由于我使用的是SQLite,而我的生产环境是在Postgres上,所以我无法在本地重现它。

在序列化之前尝试对所有值应用some_field.force_encoding(Encoding::UTF_8),看看会发生什么。

相关问题