出于某种原因,每当我从控制台访问序列化属性时,它都会将其视为普通字符串。当不从控制台访问时(例如从视图中),序列化/反序列化工作正常。我的代码如下:
class Foo < ActiveRecord::Base
belongs_to :user
serialize :serialized_data # column type is text
...
end
例如,如果我要app/views/users/show.html.erb
输入以下内容:
<%= @user.foo.serialized_data.first %>
它会正确打印出数据集中的第一个。当我从控制台运行以下命令时:
> User.first.foo.serialized_data.first
它会简单地打印出-
,这是 YAML 文件的第一个字符。此外,User.first.foo.serialized_data
将打印出一个大字符串,而不是最初保存的数组/散列。
更新:
如果我生成数据:serialized_data
并尝试在同一个控制台会话中访问它,它似乎工作正常。一旦我关闭控制台然后重新输入它,就会出现问题。
编辑:
为澄清起见,:serialized_data
是以下形式的哈希数组:
[{"stuff" => {"name" => name, "qty" => 1}}, {"stuff" => {"name" => name2, "qty" => 3}}]
并且可以这样访问:
user.foo.serialized_data[0]["stuff"]["qty"]
=> 1
编辑 2:
还需要注意的是,我将模型对象存储在我的哈希中。正如下面评论中提到的,如果我们使用我给出的示例,user.foo.serialized_data[0]["stuff"]["name"]
将返回一个Name
带有属性的模型对象。所以,我可以跑步user.foo.serialize_data[0]["stuff"]["name"].id
等等。也许该对象弄乱了 YAML 文件的语法。