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

时间:2012-05-22 23:55:27

标签: ruby-on-rails serialization console

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

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文件的语法。

1 个答案:

答案 0 :(得分:0)

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