2011-06-27 11 views
1

は、Ruby on Railsに、この単純なアプリケーション考えてみましょう:ミックスインとはActiveRecordを使用する方法:一緒ベース

学生&教師を人を拡張します。 人物には&年齢の2つのプロパティがあります。 学生は1つの追加の財産、グレードを持っています。 教師には1つの余分な財産、給料があります。

教師の情報&を別のDBテーブルに保存したいと思います。私はRoRのユーティリティクラスActiveRecord:Baseを利用して、これらのモデルのデータを取得したいと考えています。

class Student < ActiveRecord:Base 
include Person 
end 

module Person 
end 

質問:

  1. これは実装の正しい方法ですがPersonがインスタンス化されることが予想されていないので、次のように、私はStudent & Teacherと混ぜることができますか?
  2. personsというデータベーステーブルを作成せずにこれを実装するにはどうすればよいですか?私は2つのテーブル、すなわちstudentsteachersを生成したいだけで、どちらも上記の3つのプロパティを持つ必要があります。

答えて

1

人はモデルである必要はありません。それはライブラリ/モジュール(あなたの例に従ってミックスすることができます)です。あなたはRAILS_ROOT/libにそれを保持します。 学生クラスと教師クラスはモデル(AR :: Baseを使用します)とすることができ、その人は両方で使用される一般的な方法の束にすぎません。

また、子クラスがはるかに複雑な場合は、「単一テーブルの継承」を参照してください。その説明はこの回答の範囲を超えています...しかし、あなたはそれをgoogleすることができます。

+0

これは、 'student'テーブルと' teacher'テーブルの両方に 'name'と' age'フィールドを追加した場合にのみ機能します。 –

+0

はい - 両方に同じ列を追加する必要があります。ちょうど移行でそれをしてください。 –

+0

"Person"の列を継承する目的を破ることはできませんか? – brayne

関連する問題