Rails: namespacing models with table_name_prefix instead of table_name

Updated . Posted . Visible to the public. Repeats.

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
Last edit
Henning Koch
License
Source code in this card is licensed under the MIT License.
Posted by Daniel Straßner to makandra dev (2017-09-07 09:59)