0

Michael Hartl のチュートリアルを終えたばかりなので、これは初心者向けの質問です。しかし、多くの検索の後、私はまだこれに対する良い解決策を確信していません:

標準属性 (名前、電子メール、パスワードなど) をキャプチャする単一の User モデルがあります。ユーザーの検証と認証も、MH の RoR チュートリアルを使用して行われています。

さて、サインアップ時に、新しいユーザーが学生ユーザーか教師ユーザーかを選択できるようにしたいと思います。さらに、どちらのタイプのユーザーでも自分のプロファイルを作成できるようにしたいと考えています。Student_Profile は非常に基本的なものですが、Teacher_Profile はより広範なものになります。

質問:

私の調査により、単一テーブルの継承が進むべき道かもしれないと考えるようになりました。User モデルにサブクラス Teacher & Student を作成するだけでよいと思います。しかし、性感染症については否定的な考えが多いようです。さらに、Profile モデルをサブクラス モデルの 1 つに単純に関連付けることができるかどうかもわかりません。

どんな提案でも大歓迎です!ありがとう。

4

1 に答える 1

1

もう 1 つの方法は、ポリモーフィック アソシエーションを使用することです。

アップデート:

class User < ActiveRecord::Base
  belongs_to :profileable, :polymorphic => true
end

class Teacher < ActiveRecord::Base
  has_one :profile, :as => :profileable
end

class Student < ActiveRecord::Base
  has_one :profile, :as => :profileable
end

ご覧のとおり、実際には「教師にはプロファイルがあります」と「学生にはプロファイルがあります」と言います。もちろん、これは厳密には OO ではありませんが、リレーショナルデータベースを使用しているという事実を考えると、実際の OO シナリオは存在せず、シミュレートされたものにすぎません。STI やポリモーフィック アソシエーションを使用するかどうかは関係ありません。

「教師はユーザーです」と本当にプログラミングできるようにしたい (そして言いたい) 場合は、db バックエンドをMongoDBのようなオブジェクト指向データベースに変更することをお勧めします。これをバックに持つと、本物の OO が手元にあり、STI を最も賢明な方法で使用できます。

于 2013-04-21T21:32:39.043 に答える