何らかの理由で、コンソールからシリアル化された属性にアクセスすると、通常の文字列として扱われます。シリアル化/逆シリアル化は、コンソールから(ビューなどから)アクセスされていない場合は正常に機能します。私は次のようなコードを持っています:
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ファイルの構文をいじっている可能性があります。