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.

Note

table_name_prefix also avoids issues with further nesting. We have a separate card which handles the details.

Daniel Straßner
Last edit
Arne Hartherz
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)