私はこれに対する決定的な答えを見つけるのがどれほど難しいかに驚いています:それは私がそれをすべて間違って見ているに違いないほど一般的であるように思われます。
承認の役割を持つユーザーには、ROLES =%w[管理者モデレーター教師の学生の禁止]のようなものが実行されます。
一般に、ROLESフィールドと単一テーブル継承を使用することをお勧めします(ここのように)
class User < ActiveRecord::Base
end
class Student < User
end
class Teacher < User
end
ただし、これによりすべてのデータが1つのテーブルに配置されます。各ユーザータイプに固有の大量のデータがある場合はどうなりますか?
student
year:integer
request_id:integer
portfolio_id:integer
status:string
...
teachers
user_id:integer
district:string
school:string
subject1:string
subject2:string
specialty:string
bio:text
...
STIは、student.specialtyやteacher.portfolio_idのようなものを提供しますが、これらは不要であり、ブロックする必要があります。
Ruby Wayは、個別のテーブルを処理するための抽象基本モデルクラスを提案しています。
class User < ActiveRecord::Base
self.abstract = true
end
class Student < User
end
class Teacher < User
end
これにより、生徒と教師の両方に固有のテーブルが許可されます。ただし、User.find(:all)は機能しないと警告しています。さらに、必要な共通の属性があります。これは、ユーザーモデルの要点でした。
User
username:string
email:string
password:string
role:string
Userテーブルがないので、共通の属性はありませんか?
他のさまざまな回答は、、、またはを使用することを示唆して:polymorphic => true
い:class_name => 'User'
ますas:
が、投稿と画像の両方にコメントを追加するように説明されています。これは良い類似点ではないようです。
単にIS-A関係を使用して属性を継承した少なくとも1つの言語(およびおそらく2つのOODB)を思い出しているようです。
RAILSの方法は何ですか?