web-dev-qa-db-ja.com

Rails:データベース内のオブジェクトをシリアル化しますか?

データベース内のオブジェクトのシリアル化に関する一般的なガイダンスを探しています。

  1. シリアル化されたオブジェクトとは何ですか?
  2. DBでオブジェクトをシリアル化するためのいくつかのベストプラクティスシナリオは何ですか?
  3. シリアル化されたオブジェクトを使用できるように、DBで列を作成するときにどの属性を使用しますか?
  4. シリアル化されたオブジェクトを保存する方法は?
  5. そして、シリアル化されたオブジェクトとその属性にアクセスする方法は? (ハッシュを使用していますか?)
34
keruilin

コンピュータサイエンスでは、データの保存と送信のコンテキストで、シリアル化とは、データ構造またはオブジェクトをビットのシーケンスに変換して、ファイル、メモリバッファに保存したり、ネットワーク接続リンクを介して送信できるようにするプロセスです。同じまたは別のコンピューター環境で後で「復活」する。 ( http://en.wikipedia.org/wiki/Serialization を参照)

  1. したがって、シリアル化されたオブジェクト(ActiveRecordのコンテキスト内)は、オブジェクトのテキスト/文字列表現(YAMLを使用してエンコード)です。シリアル化すると、(ほぼ)任意のRubyオブジェクトを単一のデータベースフィールドに保存できます。

  2. データベースに保存する必要があるやや複雑なオブジェクトがあり、シリアル化された属性の内容に基づいてレコードを取得する必要がない場合は、シリアル化を使用できます。たとえば、webappのユーザーの設定を保存するためにそれらを使用しました。設定は基本的に、単一のdbフィールドに保存したいハッシュでした。

3./4./5。 Marc-AndréLafortuneが提案したように、 ActiveRecord :: Base.serialize を使用します。

class User < ActiveRecord::Base
  serialize :preferences
end

u = User.new
u.preferences = {:show_tooltips => true, :use_extended_menu => false, ...}
u.save

# ...

u = User.find(23)
u.preferences # => {:show_tooltips => true, :use_extended_menu => false, ...}
55
severin

本当に簡単です。 docActiveRecord::Base.serialize を確認します。

MessagePack をご覧ください

2
astropanic

Rails 4 with Postgresqlを使用している場合、Rails 4は、ハッシュを保存してクエリを許可するhstoreフィールドをサポートします。 http:// blog .remarkablelabs.com/2012/12/a-love-affair-with-postgresql-Rails-4-countdown-to-201

1
Gautham