在Rails中,关键字belongs_to、has_many等的实际作用是什么



我理解关系数据库、主键/外键等的概念,但我很难在模型中看到设置这些属性的实际结果。它们是否生成辅助函数或类似的函数?还是它们只是在数据库级别上工作?

例如,如果我有这两个模型(其他属性省略)

class Course < ActiveRecord::Base
  has_and_belongs_to_many :schedules
  has_many :sections
end
class Section < ActiveRecord::Base
  belongs_to :course
end

我可以简单地获得任何给定课程的所有部分,比如:

Section.where(course_id: 1234)

然而,我完全可以在没有建立关系的情况下做到这一点。所以我的问题是:我们为什么要这样做?

添加这些方法可以完成以下操作:

Section.find(5).course  # <== returns a 'Course' model instance

此外,它还可以让您更容易地加入查询:

Section.joins(:course).where(course: {name: "English"})  # <== returns sections who have the 'english' course

如果不在模型中设置关系,这两者都不可能实现。

类似:

Course.find(8).sections # returns an array of sections with 'course_id = 8'

它使您的调用更加语义化,并从编程的角度使事情变得更容易:)

关系应用于对象的实例。因此,这些关系允许您将相关对象获取到另一个实例

例如,假设您有一个Section(称为@section)的实例。您可以通过以下操作获得该部分的所有Course对象:

如果已设置belongs_to :course,则为@section.course

类似地,如果您有一个Course的实例,您可以使用获取该Course的所有Section对象

如果您有has_many :sections,则为@course.sections

TL;DR-这些是辅助作用域,例如CourseSection的变量。

相关内容

  • 没有找到相关文章

最新更新