2012-06-18 195 views
1

在我的Rails应用程序中,用户可以创建课程和学校(组)。每次用户创建课程或学校时,他们的user_id都存储在课程或学校的数据库表中,因此用户has_many:学校和课程以及学校或课程belongs_to:用户。此外,用户可以通过关系模型(具有user_id,school_id和:role [字符串]的学校以及课程student_users(和professor_users))参加课程并加入学校(作为学生或教授)其中有:USER_ID,COURSE_ID和:角色[字符串]我的问题是,在用户模式,我可以只指定一旦:has_many通过Ruby on Rails应用程序

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 
+0

您无法指定具有相同名称('courses')的多个关联。不知道这是你在这之后,但是? – polarblau

+0

是的,我想我应该做的是在两个关系表中更改“course”和“school”id字段的名称,然后指定一个外键 –

回答

1

你需要考虑的车型中更详细一点的所有权has_many意味着多到一的关系,这样说。 Professor has_many Courses意味着教授拥有的课程和课程只有一位教授(或者是否?)。所以,你会做这样的事情:

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 documentation阅读所有的细节。