描述ruby中的类关系

doc*_*nge 3 ruby oop class object

我从来没有做过任何直接的ruby编码 - 只适用于Rails框架.

我不确定如何描述类之间的关系,而不是继承关系.

例如,School对象可能有许多Student对象.我希望能够拨打电话,例如"myschool.student [2] .first_name"和"mystudent.school.address"

可能是我将OOP与关系数据库的元素混淆,所以如果我离开的话,对不起.

liw*_*iwp 9

我不是100%肯定这里的问题是什么......

对于第一个示例,myschool.students[2].first_name您的School类需要一个students字段的访问器,该字段需要是一个数组(或其他支持下标的内容),例如

class School
  attr_reader :students

  def initialize()
    @students = []
  end
end
Run Code Online (Sandbox Code Playgroud)

以上允许myschool.students[2]返回一些东西.假设students包含Student类的实例,该类可能是这样的:

class Student
  attr_reader :first_name, :last_name

  def initialize(first, last)
    @first_name = first
    @last_name = last
  end
end
Run Code Online (Sandbox Code Playgroud)

现在你的例子myschool.students[2].first_name,应该工作.

对于第二个例子,mystudent.school.address你需要有一个school在外地Student类和address领域School类.

棘手的一点是School和Student实例相互指向,所以你需要在某些时候设置这些引用.这将是一个简单的方法:

class School
  def add_student(student)
    @students << student
    student.school = self
  end
end

class Student
  attr_accessor :school
end
Run Code Online (Sandbox Code Playgroud)

你仍然需要添加address字段以及可能还有其他一些我错过的东西,但这应该很容易.