RailsのModelで大量の細かいデータを管理したい

モデルでカラムを serialize すると中にRubyの情報いれておけるので、やたら項目が多いときに便利

class User < ActiveRecord::Base
  serialize :serialize_data  # seriarize_data っていうとこにたくさんいれる。

  # コンストラクタ
  # serialize_dataを Hashにする
  def initialize(*args)
    super(*args)
    self.serialize_data = {}
  end

  self::KOLUMNS = [:tall, :age, :weight]
  # serialize_data でエンコード情報全てを管理する
  # reader, writer を定義してフォームで扱い易くする
  # serialize_data[フィールド名] としてデータが管理される
  KOLUMNS.each do |kolumn|
    # reader を定義
    define_method kolumn do
      self.serialize_data[kolumn]
    end
    # writer を定義
    define_method "#{kolumn}=" do |obj|
      self.serialize_data[kolumn] = obj
    end
  end
end

これで、何百とかこまごましたデータがあってもDBのカラム1つで全部管理できて気持ちいいー。SQL的な検索は出来ないので、検索したいカラムがあったら、その都度DBにカラムを追加していけばよいので、気軽。

コメントを残す

メールアドレスが公開されることはありません。