Rails 2个表,1个模型。

3

我对Ruby/Rails还比较新,我有以下问题:

我正在开发一个调度应用程序,其中有一个名为Classes的模型和另一个名为ClassEntries的模型。它们之间的关系是每个用户可以在每学期中拥有多个与一门课程相关的课堂记录。Classes表中的每条记录都属于特定的大学。用户可以在ClassEntries表中为一个学期(通常为5个)拥有多个条目。他们的时间表由所有具有相同学期ID的ClassEntries组成。

我不确定是否应该有第三个模型称为Schedule,将处理手头用户的ClassEntries和Classes模型中的信息。我最初使用PHP编写了此功能,并只是使用MySQL JOIN来收集所需的信息。在Rails中,似乎应该有更好的方法来完成这个任务。

在Rails中,最好的处理方法是什么?

十分感谢


目前我没有学期模型。我需要吗?由于Classes表中的记录与学期或时间表无关,ClassEntries需要属于一个学期,对吗? - Adam
你说你已经在PHP中实现了这个功能。你的数据库表是什么样子的(模型和关系)?任何相关信息都可以帮助我们理解你想要做什么。我还有点困惑,你所说的ClassEntries具体指什么?如果我理解正确,ClassEntry只是表示用户在特定学期参加该课程吗? - Leo Correa
1
此外,我认为给一个模型命名为“Class”会与Ruby on Rails产生冲突,可能会导致问题。 - Leo Correa
是的,这正是ClassEntry的定义。它将用户、班级和学期联系在一起。如果出现命名冲突,我可以将Class重命名为Course。在PHP中,我执行原始SQL(但在Rails中尽可能减少使用)。例如:“SELECT * FROM classentries LEFT JOIN classes ON classentries.class_id = classes.id WHERE classentries.user_id = 1” - Adam
不必了,让我写一个答案,看看它是否能帮到您,我们可以从那里继续。 - Leo Correa
显示剩余2条评论
1个回答

1

所以,你要找的基本上是Rails中的关联。

你会有以下内容:

def User < ActiveRecord::Base
  has_many :course_entries
  has_many :courses, :through => :class_entries
end

def CourseEntry < ActiveRecord::Base
  belongs_to :user
  belongs_to :course
end

def Course < ActiveRecord::Base
  has_many :course_entries
  has_many :users, :through => :class_entries
end

有了这些关联设置,Rails 就可以让你做一些像 some_user.courses 或者 some_course.users 这样的事情,并且它会通过 CourseEntry 帮你进行连接。

如果这对你有帮助,请告诉我。如果你需要更深入的了解,请告诉我。


谢谢。你提到了course_entries和class_entries。它们是可以互换使用的还是不同的实体? - Adam
抱歉,那是一个打字错误。如果类名为 CourseEntry,则应使用 :course_entries;如果命名为 ClassEntries,则应使用 :class_entries。 - Leo Correa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接