Ruby on rails Rails-从控制台访问序列化数据

Ruby on rails Rails-从控制台访问序列化数据,ruby-on-rails,serialization,console,Ruby On Rails,Serialization,Console,出于某种原因,每当我从控制台访问序列化属性时,它都将其视为普通字符串。当不从控制台(例如从视图)访问时,序列化/反序列化工作正常。我的代码如下: class Foo < ActiveRecord::Base belongs_to :user serialize :serialized_data # column type is text ... end 它将正确地打印出第一组数据。当我从控制台运行以下命令时: > User.first.foo.serialized

出于某种原因,每当我从控制台访问序列化属性时,它都将其视为普通字符串。当不从控制台(例如从视图)访问时,序列化/反序列化工作正常。我的代码如下:

class Foo < ActiveRecord::Base
  belongs_to :user
  serialize :serialized_data    # column type is text
  ...
end
它将正确地打印出第一组数据。当我从控制台运行以下命令时:

> User.first.foo.serialized_data.first
它只需打印出-,这是YAML文件的第一个字符。此外,User.first.foo.serialized_数据将打印出一个大字符串,而不是最初保存的数组/哈希

更新: 如果我在: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]将返回一个带有属性的模型名对象。所以,我可以运行user.foo.serialize_data[0][stuff][name].id等等。可能是对象弄乱了YAML文件的语法。

问题是我将整个对象存储在哈希值中,如编辑2中所述。将其切换到对象id解决了此问题。

您正在序列化的数据是什么?我开发的一个应用程序涉及序列化散列。然后,这个散列按预期作为散列返回,在这里我可以执行类似@combat_instance.entities.first[1]的操作,其中entities是序列化数据。我使用的是1,因为散列中每个数组的零索引是一个id。因此,如果要序列化除散列以外的内容,请调整设置序列化的_数据值的方法。如果再次在控制台中运行access:serialized_数据,会发生什么情况?@agmcleod-在散列中,我正在序列化一个对象。以我的问题为例,user.foo.serialized_data[0][stuff][name]实际上会返回一个模型名的对象。我已经更新了我的问题。@MichaelSlade-第二次,它只返回YAML文件的字符串。访问数组的第一个对象只返回YAML文件的第一个字符。
user.foo.serialized_data[0]["stuff"]["qty"]
=> 1