Rails: namespacing models with table_name_prefix instead of table_name

When you want to group rails models of a logical context, namespaces are your friend. However, if you have a lot of classes in the same namespace it might be tedious to specify the table name for each class seperately:

class Accounting::Invoice < ApplicationRecord
  self.table_name = 'accounting_invoices'
  ...
end

class Accounting::Payment < ApplicationRecord
  self.table_name = 'accounting_payments'
  ...
end

A replacement for the self.table_name-assignment is the table_name_prefix in the module definition:

module Accounting
  def self.table_name_prefix
    'accounting_'
  end
end

class Accounting::Invoice < ApplicationRecord
  ...
end

class Accounting::Payment < ApplicationRecord
  ...
end

Rails will be able to derive the table name accounting_invoices for Accounting::Invoice.

Daniel Straßner Over 6 years ago