Programowanie obiektowe - problem z klasami

Kilka uwag, które powinny rozwiać Twoje wątpliwości:

  1. 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 @model nie powoduje zmiany wartości atrybutu o tej samej nazwie. Najlepiej coś takiego realizować używając standardowego settera: self.model = ...
  2. Gdybyś nie dziedziczył po ApplicationRecord, to jak najbardziej miałoby to sens, bo attr_reader definiuje gettera, który odczytuje wartość zmiennej instancji o tej samej nazwie, więc Twój kod zadziałałby.
  3. Interfejs metody initialize nie jest zgodny z oryginałem, więc to raczej nie jest dobry pomysł nadpisywanie jej.
  4. Dziedziczenie klas ActiveRecord ma największy sens, jeśli używasz STI (coś do poczytania). Wtedy potrzebujesz jeszcze kolumny typu string o nazwie type
  5. 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.