【问题标题】:Rails 2 tables, 1 modelRails 2 个表,1 个模型
【发布时间】:2012-10-28 02:15:22
【问题描述】:

我对 ruby​​/rails 比较陌生,我有以下问题:

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

我不确定是否应该有第三个模型,称为 Schedule,它将 ClassEntries 和 Classes 模型中的信息汇集到手边的用户。我最初用 PHP 编写了这个功能,我只是使用 MySQL JOIN 来收集必要的信息。在 Rails 中,似乎应该有更好的方法来实现这一点。

在 Rails 中解决此问题的最佳方法是什么?

非常感谢

【问题讨论】:

  • 您的班级模型是否了解学期?有很多方法可以去做你想做的事。如果您已经编写了 PHP 功能,那么 Rails 方式应该是轻而易举的。
  • 目前我没有学期模型。我是不是该?由于 Classes 表中的记录独立于学期或时间表,因此 ClassEntries 需要属于一个学期,对吧?
  • 你说你已经在 PHP 中实现了这个。您的数据库表是什么样的(模型和关系)任何有关这方面的信息都将帮助我们了解您正在尝试做什么。我仍然有点困惑您所说的 ClassEntries 究竟是什么需要 ClassEntry?如果我理解正确,ClassEntry 只是意味着用户在特定学期参加该课程?
  • 另外,我认为你在命名模型“类”时会遇到问题,因为它会导致与 Ruby on Rails 发生冲突。
  • 是的,ClassEntry 就是这样。它将用户、班级和学期联系在一起。如果有命名冲突,我可以将 Class 重命名为 Course。在 PHP 中,我正在执行原始 SQL(我宁愿在 rails 中尽可能地减少它)。一个例子:“SELECT * FROM classentries LEFT JOIN classes ON classentries.class_id = classes.id WHERE classentries.user_id = 1”

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.2


【解决方案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.coursessome_course.users 它将通过 CourseEntry 为您进行连接。

如果这有帮助,请告诉我。如果您需要我更深入地了解,请告诉我。

【讨论】:

  • 谢谢。您提到 course_entries 和 class_entries。这些是可互换的还是不同的实体?
  • 抱歉打错了。如果该类名为 CourseEntry,那么如果其命名的 ClassEntries 使用 :class_entries,则应使用 :course_entries。
猜你喜欢
  • 1970-01-01
  • 2013-02-07
  • 1970-01-01
  • 2020-08-08
  • 2019-07-14
  • 2015-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多