Skip to content

単一テーブル継承と名前空間付きコントローラを使ったサンプル

Notifications You must be signed in to change notification settings

suginoy/Single-Table-Inheritance-and-Controller-Namespace-Sample

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

== 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に相互変換のメソッドを用意する。

About

単一テーブル継承と名前空間付きコントローラを使ったサンプル

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published