3

serialize在一个ActiveRecord模型中使用将一个Array简单的哈希序列化为一个文本数据库字段。我什至使用第二个参数强制反序列化为Arrays.

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

它似乎工作正常,但经过几次请求后,内容recipients变为HashOfIndifferentAccess散列而不是数组。这仅在模型重新加载几次后才会发生,并且我无法在测试或控制台中重现它,只能在生产环境中重现。

4

2 回答 2

2

我的一个 Rails 3.1 应用程序中的一些序列化字段也有同样的问题。经过大量故障排除后,我将其缩小到字符编码问题。我无法在本地复制它,因为我使用的是 SQLite,而我的生产环境是在 Postgres 上。

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

于 2012-09-19T18:56:05.130 回答
1

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

hashwithindifferentaccess 来自控制器。也许您是直接从控制器中获取数据,而根本没有对其进行按摩。

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

调试和解决不应该太难。

于 2012-09-13T15:19:36.923 回答