2016-09-05 6 views
0

レール4.1.14.2 4.2.7.1レール4.1.14.2 => 4.2.7.1値が文字列フィールドに文字列に変換され

my_model.my_string_attr = { a: 1 } 
my_model.my_string_attr # returns "{ a: 1 }" (as a string) 

my_string_attrはDBタイプstringである

my_model.my_string_attr = { a: 1 } 
my_model.my_string_attr # returns { a: 1 } (as a hash) 

レール。

Rails 4.2.7.1を使用してmy_model.my_string_attrにハッシュ/オープンストール値を保存するにはどうすればよいですか?

4.2.7.1の変更履歴でこの変更が見つかりませんでしたが、(4.1.14.2,4.2.7.1)の間で一部のバージョンが変更された可能性があります。

答えて

0

Rubyオブジェクトマーシャリングおよびアンマーシャリングするには、いくつかの異なる方法があります。MarshalJSONYAMLまたはバイナリシリアル化:

元帥例:他のaproachesについては

2.2.5 :012 > hash = { a: 1 } 
=> {:a=>1} 
2.2.5 :013 > s = Marshal.dump(hash) 
=> "\x04\b{\x06:\x06ai\x06" 
2.2.5 :014 > Marshal.load(s) 
=> {:a=>1} 

はあなたがhttp://www.skorks.com/2010/04/serializing-and-deserializing-objects-with-ruby/またはその他のリソースを確認してください可能性があります。

ActiveRecordのシリアル化APIを確認することもできます。属性のコーダ/デコーダを指定できます。http://api.rubyonrails.org/v4.2/classes/ActiveRecord/AttributeMethods/Serialization/ClassMethods.htmlを参照してください。

+0

私の問題は解決しないと思います。 DB上に文字列として設定された属性にハッシュ値を一時的に格納する必要があります(DBに保存する必要はありません)。 –

+0

これは私にとってはちょっと奇妙に聞こえるかもしれませんが、ここであなたの抽象概念を再考するヒントかもしれません – jethroo

関連する問題