migration extension helpers
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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|
|
||||
|
||||
Reference in New Issue
Block a user