2010-01-13

RailsでRead OnlyなModelをいっぱい作る

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
RailsでRead OnlyなModelを使うには
acts_as_readonlyable
というプラグインを使うという方法があるようですが、2.3.4では動かない気配です。
こちらを改造して使うには、
http://hisme.net/~masaki/blog/article/show/41
が参考になります。

プラグインを使わない方法として
http://lunatear.net/archives/001089.html
という方法もあります。

2.3.4を使っていてプラグインに手を入れるのがちょっと面倒でさらにいっぱいRead OnlyなModelを使いたいと思ったのでプラグインを使わない方法を参考にさせていただき以下のような感じでやってみました。

app/models/read_only.rb
を以下のような感じで作ります。
class ReadOnly < ActiveRecord::Base
  abstract_class = true

  def readonly?
    true
  end

  def before_destroy
    raise ActiveRecord::ReadOnlyRecord
  end

  def self.delete(id)
    raise ActiveRecord::ReadOnlyRecord
  end

  def self.delete_all(conditions)
    raise ActiveRecord::ReadOnlyRecord
  end

  def self.destroy_all(conditions)
    raise ActiveRecord::ReadOnlyRecord
  end

end
そしてRead Onlyにしたいモデルを以下のように書きます。
class Test < ReadOnly
end

ReadOnlyクラスに
abstract_class = true
をつけるのがポイントでした。
コメントを投稿