Last Updated: February 25, 2016
· jodosha
Avatar white

Avoid God classes in Rails

One way to avoid classes with too much knowledge of our domain is to have asymmetrical ActiveRecord associations.

Eg. In our billing system, we have a set of invoices which are related to a specific account. Just do:

class Invoice < ActiveRecord::Base
  belongs_to :account

  def self.by_account(account)
    where(account_id: account.id)

Note that we didn't declared an account to have many invoices, because this class shouldn't be aware of this concept.

This has an impact on how we're used to use AR APIs: from account.invoices to Invoice.by_account(account), that can be a bit noisy, but for sure has the clear advantage of keeping your classes lighter.

Say Thanks