【问题标题】:Rails - Accessing serialized data from consoleRails - 从控制台访问序列化数据
【发布时间】:2012-05-29 12:20:57
【问题描述】:

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

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:
还需要注意的是,我在哈希中存储了一个模型对象。正如下面的 cmets 中所提到的,如果我们使用我给出的示例,user.foo.serialized_data[0]["stuff"]["name"] 将返回模型为 Name 的带有属性的对象。所以,我可以运行user.foo.serialize_data[0]["stuff"]["name"].id 等等。可能是对象弄乱了 YAML 文件的语法。

【问题讨论】:

  • 你要序列化的数据是什么?我曾经开发过的一个应用程序涉及序列化哈希。然后这个散列像预期的那样作为散列返回,我可以在其中执行@combat_instance.entities.first[1].attack_damage 之类的操作,其中实体是序列化数据。我使用 1,因为散列中每个数组的零索引是一个 id。因此,如果您想序列化其他内容而不仅仅是哈希,请调整设置 serialized_data 值的方法。
  • 如果您再次在控制台中运行 access :serialized_data 会发生什么?
  • @agmcleod - 在哈希中,我正在序列化一个对象。以我的问题为例,user.foo.serialized_data[0]["stuff"]["name"] 实际上会返回模型Name 的对象。我已经更新了我的问题。
  • @MichaelSlade - 第二次,它只是返回 YAML 文件的字符串。访问应该是数组的第一个对象仅返回 YAML 文件的第一个字符。

标签: ruby-on-rails serialization console


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2020-02-26
    • 1970-01-01
    • 2016-09-10
    • 1970-01-01
    • 2016-12-28
    • 1970-01-01
    • 1970-01-01
    • 2019-07-29
    • 1970-01-01
    相关资源
    最近更新 更多