web-dev-qa-db-ja.com

データベースへの配列の保存:JSONとシリアル化された配列

投稿の最後の3つのコメントである3つの要素の配列を保存します。 CommentテーブルをPostテーブルに結合できることは知っていますが、スケーリングのためにこのような重いリクエストを行うことは避けたいと思います。

だから、新しいコメントが作成されるたびに簡単に更新したいので、最後のコメントを削除して新しいコメントを追加するので、これらの3つの要素を保存する最良の方法は何だろうと思っていました。

これを行う正しい方法は何ですか?シリアル化された配列またはJSONオブジェクトに保存しますか?

42
titibouboul

ActiveRecordのserialize宣言を使用して配列とハッシュを保存できます。

class Comment < ActiveRecord::Base
  serialize :stuff
end

comment = Comment.new  # stuff: nil
comment.stuff = ['some', 'stuff', 'as array']
comment.save
comment.stuff # => ['some', 'stuff', 'as array']

オブジェクト型が等しいクラス名を指定できます(この場合はArray)。これはより明示的で、少し安全です。また、既存の(空の)配列に追加できるため、最初の値を割り当てるときに配列を作成する必要はありません。

class Comment < ActiveRecord::Base
  serialize :stuff, Array
end

comment = Comment.new  # stuff: []
comment.stuff << 'some' << 'stuff' << 'as array'

Storeと呼ばれるすてきなバージョンを使用することもできます: http://api.rubyonrails.org/classes/ActiveRecord/Store.html

これは、組み込みメソッドを使用してユースケースを処理する必要があります。

76
DiegoSalazar