カテゴリー:
Rails
タグ:
 Rails PaperTrail

このエントリーをはてなブックマークに追加
更新日時:
2014年04月07日(月)
作成日時:
2014年04月07日(月)

前の記事 / 次の記事

PaperTrailはデフォルトでなんでもかんでもversionsテーブルに格納される。
テーブルを分けたい場合は、

class PostVersion < PaperTrail::Version
  self.table_name = :post_versions
end

みたいなクラスとテーブルをつくって
履歴を取りたいモデルで

class Post < ActiveRecord::Base
  has_paper_trail :class_name => 'PostVersion'
end

とした上で更に、"config/initializer" 辺りで、

PaperTrail::Version.module_eval do
  self.abstract_class = true
end

とするか、
実際には使わなくても versionsテーブルを作成しておかないといけないのだけど、

何かの拍子でやっぱ全部versionsテーブルに格納しようと思った時、

PaperTrail::Version.module_eval do
  self.abstract_class = true
end

の定義があるとテーブルがねーっていうか、
テーブルじゃなくて配列なんだけど、配列に名前とかないんだけど、
テーブル名わかんないんだけど、って言われて動かなくなる。

ていうかそんな定義書いたの完全に忘却してて嵌まった。

なので、別々のテーブルに履歴を格納する場合でも、
abstract_class として扱わせるんじゃなくて、実テーブルを用意してやった方が
後で嵌まらないからいいんじゃないかと思った。