@@ -19,7 +19,7 @@ module ActiveRecord
1919 module AssociationInversing
2020 extend ActiveSupport ::Concern
2121
22- ALLOWED_CREATE_INVERSE_OPTIONS = [ :multiplicity , :passthrough_options , :scope , :through ] . freeze
22+ ALLOWED_CREATE_INVERSE_OPTIONS = [ :after , : multiplicity, :passthrough_options , :scope , :through ] . freeze
2323
2424 included do
2525 raise ArgumentError , "This concern should be prepended"
@@ -38,6 +38,7 @@ def belongs_to(association_name, scope = nil, **options)
3838 create_inverse_scope :,
3939 create_inverse_passthrough_options :,
4040 create_inverse_multiplicity :,
41+ create_inverse_after_hook :
4142 }
4243
4344 class_name = options [ :class_name ] || new_reflection . name . to_s . camelize
@@ -91,6 +92,8 @@ def belongs_to(association_name, scope = nil, **options)
9192 else
9293 raise "Control should never reach here"
9394 end
95+
96+ target_class . instance_exec ( &create_inverse_after_hook )
9497 end
9598
9699 reflections
@@ -126,6 +129,7 @@ def create_has_inverse(new_reflection, create_inverse_options, **options)
126129 create_inverse_through_name :,
127130 create_inverse_passthrough_options :,
128131 create_inverse_multiplicity :,
132+ create_inverse_after_hook :
129133 }
130134
131135 class_name = options [ :class_name ] ||
@@ -236,6 +240,8 @@ def create_has_inverse(new_reflection, create_inverse_options, **options)
236240 end
237241 end
238242
243+ target_class . instance_exec ( &create_inverse_after_hook )
244+
239245 new_reflection
240246 end
241247
@@ -244,6 +250,7 @@ def normalize_create_inverse_options(create_inverse_options)
244250 create_inverse_through_name = nil
245251 create_inverse_passthrough_options = { }
246252 create_inverse_multiplicity = :many
253+ create_inverse_after_hook = -> { }
247254
248255 if create_inverse_options . is_a? ( Hash )
249256 invalid_options = ( create_inverse_options . keys - ALLOWED_CREATE_INVERSE_OPTIONS )
@@ -258,6 +265,7 @@ def normalize_create_inverse_options(create_inverse_options)
258265 create_inverse_passthrough_options = create_inverse_options [ :passthrough_options ] ||
259266 create_inverse_passthrough_options
260267 create_inverse_multiplicity = ( create_inverse_options [ :multiplicity ] || create_inverse_multiplicity ) . to_sym
268+ create_inverse_after_hook = create_inverse_options [ :after ] || create_inverse_after_hook
261269
262270 case create_inverse_multiplicity
263271 when :many , :one
@@ -271,6 +279,7 @@ def normalize_create_inverse_options(create_inverse_options)
271279 create_inverse_through_name :,
272280 create_inverse_passthrough_options :,
273281 create_inverse_multiplicity :,
282+ create_inverse_after_hook :,
274283 }
275284 end
276285 end
0 commit comments