ActiveRecordのモデルに対してto_hashを出来るようにする。

モデルの中身をJSONとして出力する前段階として、モデルの中身をハッシュとして扱いたかったのですが、標準でハッシュに変換する方法が見つかりませんでした。

そのため、to_hash関数を自分で追加することにしました。

モデルクラスに以下のコードを追加:

def to_hash
    ActiveSupport::JSON.decode(self.to_json)
end

これで、 「モデルオブジェクト.to_hash」 でいつでもハッシュ化できます。
ただこれだと、関連しているテーブルを追いかけてくれるわけではないので、まだ少し不便だったりもします。

もっと良い方法もあるかもしれません。

追記 (12/03/02):
こっちのほうが良さそうです。(情報提供ありがとうございます!)

def to_hash
  Hash[*self.map{ |i| [i.id, i]}.flatten]
end
デザインも頼めるシステム開発会社をお探しならBPS株式会社までどうぞ 開発エンジニア積極採用中です! Ruby on Rails の開発なら実績豊富なBPS

この記事の著者

BPSアドベントカレンダー

週刊Railsウォッチ