2012-02-28 16 views
0

ネストされたハッシュをデータベースに保存して取得しようとしていますが、ネストされた値は取得時に失われます。Ruby on Railsにネストされたハッシュを保存する

私のモデルは次のようになります。

class User 
    serialize :metadata, MetaData 
end 

クラスのメタデータは次のようになります。

class MetaData < Hash 
    attr_accessor :availability, :validated 
end 

私はデータを保存するために使用しているコードは次のようなもの(実際のデータが来ているように見えますしかし、HTMLフォームから):

user = User.find(id) 
user.metadata.validated = true 
user.metadata.availability = {'Sunday' => 'Yes', 'Monday' => 'No', 'Tuesday' => 'Yes'} 
user.save 

私はデータベース内のデータを見ると、次のように表示されます。

--- !map:MetaData 
availability: !map:ActiveSupport::HashWithIndifferentAccess 
    Sunday: "Yes" 
    Monday: "No" 
    Tuesday: "Yes" 
validated: true 

私は再びオブジェクトを取得しようとすると、問題が発生します。

user = User.find(id) 
user.metadata.validated # <- this is true 
user.metadata.availability # <- this is nil 

任意のアイデア?私はデータストアとしてPostgreSQLと一緒にRails 3.1を使用しています。

答えて

1

データベースを見ると「map:ActiveSupport::HashWithIndifferentAccess」と表示されますか?

私のアプローチは、利用可能な日数のハッシュコレクション構造から空きの単一インスタンスを分離することです。

+0

それはHashWithIndifferentAccessとしてHTMLフォームから来ています。これを通常のハッシュに変換することを提案していますか?代わりにそれを保存しますか? – fffanatics

+0

私はそれを通常のハッシュに変換しようとしましたが、同じ問題を抱えています。 – fffanatics

0

あなたはuser.metadata.validatedを意味する#< - これは本当ですか?

メタデータと可用性はどのようなDB列に格納されていますか?彼らはテキストである必要があります

+0

メタデータと呼ばれる列は1つだけです。これはタイプテキストです。可用性は、私がメタデータに格納しているハッシュのキーです。 – fffanatics

関連する問題