0

コース申請システムを構築しています。高校生、学部生、大学院生は全員このコースに申し込むことができます。彼らはいくつかの申請書に記入する必要があります。

ただし、それらの情報フォームは類似していますが、完全に同じではありません。すべての学生には名前、電話番号、電子メール、住所などがあります。ただし、GPAを提供する必要があるのは学部生のみであり、大学院生はどのラボで研究しているのかを伝える必要があります。他にも微妙な違いがあります...

では、これにどのように対処すればよいでしょうか。大きなテーブルを作成しますが、高校生の「GPA」列をNULLのままにしますか?または、3つの別々のテーブルを使用しますか?

Studentさらに、 (または、3つのテーブルの場合、、、HighSchoolStudentおよびUndergraduateStudentGraduateStudentと他のモデルの間には何らかの関係があります。たとえば、sがたくさんある、sCourseがたくさんある、などです。StudentStudentQuestion

4

2 に答える 2

1

これを実現するには、 STIStore機能を組み合わせて使用​​できます。

Studentというテキスト列を持つの基本モデルを宣言しますsettings

class Student < ActiveRecord::Base
  store :settings
  # name, email, phone, address etc..
end


class HighSchoolStudent < Student
  # declare HighSchoolStudent specific attributes 
  store_accessor :settings, :gpa
end


class UndergraduateStudent < Student
  # declare UndergraduateStudent specific attributes 
  store_accessor :settings, :attr1
end

class GraduateStudent< Student
  # declare GraduateStudent specific attributes 
  store_accessor :settings, :attr2
end

上記のサンプルでは、​​ のインスタンスにHighSchoolStudentという属性がありますgpa

于 2012-04-17T18:16:10.717 に答える
0

GPAをnullのままにするなどのオプションを選択し、モデルのカスタム検証を設定して、生徒のタイプに応じてのみチェックするようにすることができます。単一テーブル継承もオプションであり、データベーステーブルの列で使用するさまざまなクラス名を指定してから、これらのクラスをモデルディレクトリに追加するだけです。ここでいくつかのドキュメントを見ることができます:http://api.rubyonrails.org/classes/ActiveRecord/Base.html

私はこれまでSTIを試したことがありませんが、あなたが上で述べたことを考えると、おそらくそのルートに行き、コードを分岐して、それがどのように機能するかを確認します。

于 2012-04-17T18:01:13.637 に答える