Je ne suis pas 100% sûr de ce que la question est ici ...
Pour le premier exemple, myschool.students[2].first_name
, votre classe School
a besoin d'un accesseur pour un students
champ, qui doit être un tableau (ou quelque chose d'autre qui prend en charge les indices) par exemple.
class School
attr_reader :students
def initialize()
@students = []
end
end
Le ci-dessus permet myschool.students[2]
de retourner quelque chose. En supposant que students
contient les instances d'une classe Student
, cette classe pourrait être quelque chose comme ceci:
class Student
attr_reader :first_name, :last_name
def initialize(first, last)
@first_name = first
@last_name = last
end
end
Maintenant votre exemple, myschool.students[2].first_name
, devrait fonctionner.
Pour le deuxième exemple, mystudent.school.address
, vous devez avoir un champ school
dans la classe Student
et un champ address
dans la classe School
. Le bit délicat est que les instances School
et Student
pointent l'une vers l'autre, vous devez donc configurer ces références à un moment donné. Ce serait un moyen simple:
class School
def add_student(student)
@students << student
student.school = self
end
end
class Student
attr_accessor :school
end
Vous devez toujours ajouter le champ address
et peut-être d'autres choses que j'ai manqué, mais cela devrait être assez facile à faire.
Excellente réponse! Je n'avais pas réalisé que c'était aussi simple. Merci beaucoup. – doctororange