Read more

Rails: namespacing models with table_name_prefix instead of table_name

Daniel Straßner
September 07, 2017Software engineer at makandra GmbH

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
Illustration web development

Do you need DevOps-experts?

Your development team has a full backlog? No time for infrastructure architecture? Our DevOps team is ready to support you!

  • We build reliable cloud solutions with Infrastructure as code
  • We are experts in security, Linux and databases
  • We support your dev team to perform
Read more Show archive.org snapshot

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.

Posted by Daniel Straßner to makandra dev (2017-09-07 11:59)