Kilka uwag, które powinny rozwiać Twoje wątpliwości:
- Atrybut obiektu generowany na podstawie kolumny w bazie danych nie jest tym samym, co zmienna instancji (
@model). ActiveRecord implementuje to w sposób trochę bardziej złożony, więc przypisanie czegoś do zmiennej@modelnie powoduje zmiany wartości atrybutu o tej samej nazwie. Najlepiej coś takiego realizować używając standardowego settera:self.model = ... - Gdybyś nie dziedziczył po
ApplicationRecord, to jak najbardziej miałoby to sens, boattr_readerdefiniuje gettera, który odczytuje wartość zmiennej instancji o tej samej nazwie, więc Twój kod zadziałałby. - Interfejs metody initialize nie jest zgodny z oryginałem, więc to raczej nie jest dobry pomysł nadpisywanie jej.
- Dziedziczenie klas ActiveRecord ma największy sens, jeśli używasz STI (coś do poczytania). Wtedy potrzebujesz jeszcze kolumny typu string o nazwie
type - Jeśli chodzi o klasy w czystym Rubym (tzw. PORO), to najlepiej je przechowywać w katalogu app w jakimś podkatalogu, który wskazuje, czym (jakim wzorcem) jest ta klasa, np. app/decorators, app/services, app/interactors, app/validators, itp. Takie katalogi będą już załadowanie do aplikacji, nie musisz nigdzie pisać require. Możesz ich używać w kontrolerach, modelach, czy też innych klasach.