diff --git a/lib/has_aux_table.rb b/lib/has_aux_table.rb index 053c953..de9640d 100644 --- a/lib/has_aux_table.rb +++ b/lib/has_aux_table.rb @@ -262,11 +262,11 @@ module HasAuxTable sig { params(aux_config: AuxTableConfig).void } def setup_initialize_hook!(aux_config) initialize_method = self.instance_method(:initialize) - self.define_method(:initialize) do |args| + self.define_method(:initialize) do |args, **kwargs, &block| T.bind(self, ActiveRecord::Base) aux_args, main_args = args.partition { |k, _| aux_config.is_aux_column?(k) }.map(&:to_h) - initialize_method.bind(self).call(main_args) + initialize_method.bind(self).call(main_args, **kwargs, &block) aux_config.assign_aux_attributes(self, aux_args) end end diff --git a/spec/active_record/aux_table_spec.rb b/spec/active_record/aux_table_spec.rb index 34ee94e..ac3bcd1 100644 --- a/spec/active_record/aux_table_spec.rb +++ b/spec/active_record/aux_table_spec.rb @@ -47,6 +47,7 @@ RSpec.describe HasAuxTable do t.timestamps t.create_aux :driver do |t| + t.integer :license_number t.references :car, null: false, foreign_key: { @@ -693,6 +694,17 @@ RSpec.describe HasAuxTable do expect(driver.car.engine_size).to eq(1.5) end + it "executes the hooks when creating through the association" do + driver = + @car + .drivers + .create!(name: "John Doe") do |driver| + driver.license_number = 123_456 + end + + expect(driver.license_number).to eq(123_456) + end + it "can create a driver directly" do driver = Driver.create!(car: @car, name: "John Doe") expect(driver.car).to eq(@car)