Skip to content

Commit 37c0358

Browse files
committed
Make sure we save extra data on update
1 parent 45dff66 commit 37c0358

File tree

1 file changed

+18
-15
lines changed

1 file changed

+18
-15
lines changed

app/controllers/api/v8/users_controller.rb

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -122,24 +122,26 @@ def create
122122
def update
123123
unauthorize_guest! if current_user.guest?
124124

125-
@user = current_user
126-
@user = User.find_by!(id: params[:id]) unless params[:id] == 'current'
127-
@email_before = @user.email
128-
authorize! :update, @user
129-
set_user_fields
130-
set_extra_data
131-
update_email
132-
maybe_update_password
133-
if @user.errors.empty? && @user.save
125+
User.transaction do
126+
@user = current_user
127+
@user = User.find_by!(id: params[:id]) unless params[:id] == 'current'
128+
@email_before = @user.email
129+
authorize! :update, @user
130+
set_user_fields
131+
set_extra_data(true)
132+
update_email
133+
maybe_update_password
134+
if !@user.errors.empty? || !@user.save
135+
raise ActiveRecord::Rollback
136+
end
134137
RecentlyChangedUserDetail.email_changed.create!(old_value: @email_before, new_value: @user.email) unless @email_before.casecmp(@user.email).zero?
135-
render json: {
138+
return render json: {
136139
message: 'User details updated.'
137140
}
138-
else
139-
render json: {
140-
errors: @user.errors
141-
}, status: :bad_request
142141
end
142+
render json: {
143+
errors: @user.errors
144+
}, status: :bad_request
143145
end
144146

145147
private
@@ -206,7 +208,7 @@ def set_user_fields
206208
changes
207209
end
208210

209-
def set_extra_data
211+
def set_extra_data(eager_save = false)
210212
return unless params['user']
211213
extra_fields = params['user']['extra_fields']
212214
return if extra_fields.nil?
@@ -215,6 +217,7 @@ def set_extra_data
215217
extra_fields['data'].each do |key, value|
216218
datum = @user.user_app_data.find_or_initialize_by(namespace: namespace, field_name: key)
217219
datum.value = value
220+
datum.save! if eager_save
218221
end
219222
end
220223
end

0 commit comments

Comments
 (0)