规划Rails应用程序关联

时间:2012-06-20 22:50:57

标签: ruby-on-rails associations rails-activerecord

我正在尝试开发我的第一个rails应用程序,在我开始实际实现我的想法之前,我希望我可以帮助我的协会计划。

我的应用程序将成为一种教育工具,我需要实现一些基本功能。我希望有能够注册并创建课程的学生。在这些课程中,将有一个用户是教师,其余的是学生。课程内将是教师创建的作业以及用户需要提交的作业。这些是基础知识。最终我想添加更多功能,但截至目前我只需要设置基础。

到目前为止,我的想法是关于协会应该是什么样的:

class User < ActiveRecord::Base
    has_many :enrollments
    has_many :courses, :through => :enrollments
end

class Course < ActiveRecord::Base
    has_many :enrollments
    has_many :users, :through => :enrollments
end

class Enrollment < ActiveRecord::Base
    belongs_to :user     # foreign key - user_id
    belongs_to :course   # foreign key - course_id
end

然而,我现在正陷入缺乏经验的困境之中,目前如何妥善处理其余的协会。我可能会破解某些东西,但我宁愿在第一时间做到最好。

如何处理与作业和提交相关的关联?据推测,学生的提交应属于他们,但它也与课堂内的作业具体相关。作业来自课程,但也与用户密切相关。

最后,处理用户与他们创建的类之间关系的最佳方法是什么?用户创建课程。那个课程属于他们吗?我应该在课程表中添加一列来存储创建者的ID吗?等等。

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

建议: 您可能希望将教师和学生模型分开,因为您很可能会有与每个模型相关联的不同操作(虽然它们共享某些属性,但它们实际上是模型中的不同实体,例如,您可能只需要一个老师在课程中教学。) 您可以从具有共享属性和身份验证的用户模型派生教师模型和学生模型。

现在回答你的问题:

如果您想让创建课程的学生保持联系,那么creator_id就是我的方式。 (如果教师也可以创建课程,从共享用户模型中导出学生和教师会有所帮助)

作业和提交: 你几乎用文字定义了它。这是代码。 [如果课程中的不同学生可以获得不同的作业,那么您是否只想在学生和作业之间建立直接关联,否则,使用通过关联]

class User < ActiveRecord::Base
    has_many :enrollments
    has_many :courses, :through => :enrollments
    has_many :assignments, :through => :courses
    has_many :submissions
end

class Course < ActiveRecord::Base
    has_many :enrollments
    has_many :users, :through => :enrollments
    has_many :assignments
end

class Enrollment < ActiveRecord::Base
    belongs_to :user     # foreign key - user_id
    belongs_to :course   # foreign key - course_id
end

class Assignment < ActiveRecord::Base
    belongs_to :course
    has_many :submissions
end

class Submission < ActiveRecord::Base
    belongs_to :assignment
    belongs_to :user
end