1

何らかの理由で、コンソールからシリアル化された属性にアクセスすると、通常の文字列として扱われます。シリアル化/逆シリアル化は、コンソールから(ビューなどから)アクセスされていない場合は正常に機能します。私は次のようなコードを持っています:

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ファイルの構文をいじっている可能性があります。

4

1 に答える 1

0

問題は、EDIT 2で述べたように、オブジェクト全体をハッシュ値に格納していたことです。オブジェクトに切り替えると、idこの問題が修正されました。

于 2012-05-23T19:46:16.110 に答える