migration extension helpers

This commit is contained in:
Dylan Knutson
2025-07-14 17:08:22 +00:00
parent 4933e63f31
commit c870eef9bc
4 changed files with 44 additions and 16 deletions

View File

@@ -163,13 +163,13 @@ module ActiveRecord
%i[save save!].each do |method_name|
save_method = self.instance_method(method_name)
self.define_method(method_name) do |*args|
result = save_method.bind(self).call(*args)
self.define_method(method_name) do |*args, **kwargs|
result = save_method.bind(self).call(*args, **kwargs)
result &&=
self
.association(aux_config.aux_association_name)
.target
.send(method_name)
.send(method_name, *args, **kwargs)
result
end
end

View File

@@ -3,7 +3,39 @@
module ActiveRecord
module AuxTable
class BaseTableDefinition
delegate_missing_to :inner
def initialize(schema, base_table_name, inner)
@schema = schema
@base_table_name = base_table_name
@inner = inner
end
def create_aux(aux_name, **options, &block)
@schema.create_aux_table(@base_table_name, aux_name, **options, &block)
end
private
attr_reader :schema, :inner
end
module MigrationExtensions
def create_base_table(name, type: :string, **options)
create_table(name, **options) do |t|
t.column :type, type, null: false
t = BaseTableDefinition.new(self, name, t)
yield t
end
end
def change_base_table(name, **options)
change_table(name, **options) do |t|
yield BaseTableDefinition.new(self, name, t)
end
end
def create_aux_table(base_table, name, **options)
aux_table_name = "#{base_table}_#{name}_aux"
create_table(aux_table_name, id: false, **options) do |t|