1

私の Rails アプリでは、ユーザーはコースと学校 (グループ) を作成できます。ユーザーがコースまたは学校を作成するたびに、そのユーザー ID がコースまたは学校のデータベース テーブルに格納されるため、ユーザーには :schools と :courses があり、学校またはコースは :user に属しています。また、ユーザーはコースに参加し、関係モデル (:user_id、school_id、および :role [文字列] を持つ学校の学校グループ、およびコースの学生ユーザー (および教授ユーザー) の学校グループ) を介して、has_many を使用して学校に (学生または教授として) 参加できます。これには :user_id、course_id、および :role [string] があります。私の質問は、ユーザー モデルで次のように指定するだけでよいということです。

has_many :schools, :dependent => :destroy
has_many :courses, :dependent => :destroy
has_many :schoolgroups, :dependent => :destroy
has_many :student_users, :dependent => :destroy
has_many :professor_users, :dependent => :destroy

または、次のようなユーザー モデルが必要でしょうか。

has_many :schools, :dependent => :destroy
has_many :courses, :dependent => :destroy
has_many :schoolgroups, :dependent => :destroy
has_many :schools, :through => :schoolgroups
has_many :student_users, :dependent => :destroy
has_many :courses, :through => :student_users
has_many :professor_users, :dependent => :destroy
has_many :courses, :through => :professor_users
4

1 に答える 1

1

モデルの所有権についてもう少し詳しく考える必要があります。has_manyは多対 1 の関係をProfessor has_many Courses意味するため、教授がコースを所有し、コースには教授が 1 人しかいないことを意味します (またはそうしますか?)。したがって、次のようにします。

has_many :school, :dependent => :destroy
has_many :courses, :dependent => :destroy
has_many :schoolgroups, :dependent => :destroy

一方、ユーザーが関連付けられているものがありますが、他のユーザーも同じように関連付けられている場合があります。たとえば、ユーザーはコースの学生になることができますが、他の多くの学生もそうすることができます。has_and_belongs_to_manyこれには、多対多の関係を表す HABTMを使用する必要があります。

has_and_belongs_to_many :courses_as_student, :class_name => "Course",
                                             :join_table => "student_users"

次に、Courseクラスで:

belongs_to :user

# or even better:
# belongs_to :professor, :class_name => "User", :foreign_key => "professor_id"

has_and_belongs_to_many :students, :class_name => "User",
                                   :join_table => "student_users"

Rails のドキュメントですべての詳細を読むことができます。

于 2012-06-18T15:02:13.243 に答える