単一テーブル継承と名前空間付きコントローラを使ったサンプル
Ruby JavaScript CoffeeScript
Switch branches/tags
Nothing to show
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
app
config
db
doc
lib
log
public
script
test
vendor
.gitignore
Gemfile
Gemfile.lock
README
Rakefile
config.ru

README

== Rails 3.1で単一テーブル継承とnamespaceを使ったサンプル

Petモデルを継承したCat::CatモデルとDog::DogモデルのCRUDアプリケーションのサンプル

=== 実装をためしてみて気づいた点など

1.宣言上は、Cat/DogクラスがPetクラスを継承しているが、属性の数から考えると、PetがCat/Dogを多重継承しているようなイメージで気持ち悪い。
2.type属性はPet.new(params[:pet])に含まれない。直接設定しなければならない。validates :incudeからnilを除外するとPetのインスタンスを永続化できないようにできる。
2.モデルに永続化したい属性を追加するには、petsテーブルへの追加になる。NOT NULL制約等をテーブルに追加すると、
  継承したクラスすべてが影響を受けるため、子クラスのみの制約は、アプリケーションレイヤでのみ実装する。
  validatesが親クラスと子クラスに散らばる可能性があるので、

3.xxx_pathヘルパーメソッドが名前空間付きになるので、やや面倒。
4.表示を"Cat::Cat"ではなく、"Cat"のようにしたければ、application_helperに相互変換のメソッドを用意する。