У @dparoli была хорошая идея.
Иногда для отношений «многие ко многим» используют наследуемый класс Pivot, но пока это не имеет значения.
Так что теперь мы можем использовать этот код ниже для списков.
$country = Country::findOrFail(1);
foreach ($country->countryStreet as $countryStreet){
echo $countryStreet->street->name
foreach($countryStreet->numbers as $number) {
$number;
}
}
class Countries
public function countryStreet()
{
return $this->hasMany(CountryStreet::class, 'country_id', 'id');
}
Class CountryStreet with method block() using relation hasOne
Еще одна реализация.
Если необходимо управлять тем, что происходит, когда объект уничтожается, действительно необходимо явно уничтожать его сами - это дизайном. Вы, как предполагается, не можете уничтожить объект явно любой - это также дизайном.
, Другими словами, с точки зрения Вашей программы, объект никогда не уничтожается или не непрочен. По этим причинам необходимо заново продумать проблему (это не редкая потребность - выпуск ресурсов, когда объект больше не необходим), таким образом, это вписывается в парадигму Ruby.
Установка объекта к нолю дает подсказку сборщику "мусора", но не обязательно сразу уничтожает его.
Однако, если у Вас должен быть сборщик "мусора", обрабатывают его, затем продолжают читать.
нет никакой прямой поддержки деструктора, но у Вас может быть он, звонят функция финализатора , когда он уничтожается.
Согласно http://pleac.sourceforge.net/pleac_ruby/classesetc.html это не может быть собрано "мусор", если это содержит ссылку на исходный объект, так должен быть метод класса и не метод экземпляра.
class MyClass
def initialize
ObjectSpace.define_finalizer(self,
self.class.method(:finalize).to_proc)
end
def MyClass.finalize(id)
puts "Object #{id} dying at #{Time.new}"
end
end