ActiveRecord: Klasse einer Model-Instanz ändern

ActiveRecord erlaubt das direkte Ändern der Klasse einer Model-Instanz mittels #becomes. Dies kann zum Beispiel hilfreich sein, wenn man für einen Spezialfall weitere Funktionen oder Validierungen zu einem Model hinzufügen will: > company = Company.last > company.persisted? => true > company.valid? => true > company = company.becomes(RestrictedCompany) > company.is_a?(RestrictedCompany) => true > company.is_a?(Company) => true > […]

Methoden für Active-Record-Relationen definieren

Ein Scope in Active Record ist nichts anderes als syntaktischer Zucker für das Definieren einer Klassenmethode. Die folgenden User-Models führen zum selben Ergebnis: class User < ActiveRecord::Base scope :admins, -> { where(role: „admin“) } end class User < ActiveRecord::Base def self.admins where(role: „admin“) end end Da man Scopes verketten kann drängt sich der (berechtigte) Verdacht auf, […]