Я не на 100% уверен, что вопрос здесь ...
Для первого примера, myschool.students[2].first_name
, вашему классу School
необходим метод доступа к полю students
, который должен быть массивом (или чем-то еще, поддерживающим подписки), например,
class School
attr_reader :students
def initialize()
@students = []
end
end
Вышеуказанное позволяет 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
Теперь ваш пример, 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
Вам все еще нужно добавить поле address
и, возможно, некоторые другие вещи, которые я пропустил, но это должно быть достаточно легко сделать.