@@ -8,6 +8,9 @@ class Base
88 include ActiveModel ::Model
99 include ActiveModel ::Attributes
1010 include ActiveModel ::Validations
11+ extend ActiveModel ::Callbacks
12+
13+ define_model_callbacks :assign_form_attributes , :submit
1114
1215 def self . proxy_for ( klass , object )
1316 delegate :new_record? , :persisted? , :id , to : object
@@ -26,16 +29,20 @@ def perform
2629 end
2730
2831 def assign_form_attributes ( params )
29- params = ActionController ::Parameters . new ( params ) unless params . is_a? ( ActionController ::Parameters )
30- attribute_names . each do |attribute |
31- default_value = self . class . _default_attributes [ attribute ] &.value_before_type_cast
32- public_send ( :"#{ attribute } =" , params &.dig ( attribute ) || default_value )
32+ run_callbacks :assign_form_attributes do
33+ params = ActionController ::Parameters . new ( params ) unless params . is_a? ( ActionController ::Parameters )
34+ attribute_names . each do |attribute |
35+ default_value = self . class . _default_attributes [ attribute ] &.value_before_type_cast
36+ public_send ( :"#{ attribute } =" , params &.dig ( attribute ) || default_value )
37+ end
3338 end
3439 end
3540
3641 def submit ( params )
37- assign_form_attributes ( params )
38- !!( valid? && perform )
42+ run_callbacks :submit do
43+ assign_form_attributes ( params )
44+ !!( valid? && perform )
45+ end
3946 rescue HyperActiveForm ::CancelFormSubmit
4047 false
4148 end
0 commit comments