diff --git a/app/models/user.rb b/app/models/user.rb index 991974c2243..17a770bb97e 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -592,7 +592,6 @@ class User < ActiveRecord::Base @unread_pms = nil @unread_bookmarks = nil @unread_high_prios = nil - @user_fields_cache = nil @ignored_user_ids = nil @muted_user_ids = nil @belonging_to_group_ids = nil @@ -1515,15 +1514,7 @@ class User < ActiveRecord::Base def user_fields(field_ids = nil) field_ids = (@all_user_field_ids ||= UserField.pluck(:id)) if field_ids.nil? - @user_fields_cache ||= {} - - # Memoize based on requested fields - @user_fields_cache[field_ids.join(":")] ||= {}.tap do |hash| - field_ids.each do |fid| - # The hash keys are strings for backwards compatibility - hash[fid.to_s] = custom_fields["#{USER_FIELD_PREFIX}#{fid}"] - end - end + field_ids.map { |fid| [fid.to_s, custom_fields["#{USER_FIELD_PREFIX}#{fid}"]] }.to_h end def validatable_user_fields_values diff --git a/spec/requests/users_controller_spec.rb b/spec/requests/users_controller_spec.rb index c8f0646b0e6..2dac1fcadb6 100644 --- a/spec/requests/users_controller_spec.rb +++ b/spec/requests/users_controller_spec.rb @@ -1630,6 +1630,33 @@ RSpec.describe UsersController do expect(created_user.email).to eq("staged@account.com") expect(response.status).to eq(403) end + + it "works with custom fields" do + tennis_field = Fabricate(:user_field, show_on_profile: true, name: "Favorite tennis player") + + post "/u.json", + params: + honeypot_magic( + email: staged.email, + username: "dude", + password: "P4ssw0rd$$", + user_fields: { + [tennis_field.id] => "Nadal", + }, + ) + + expect(response.status).to eq(200) + result = response.parsed_body + expect(result["success"]).to eq(true) + + created_user = User.find_by_email(staged.email) + expect(created_user.staged).to eq(false) + expect(created_user.active).to eq(false) + expect(created_user.registration_ip_address).to be_present + expect(!!created_user.custom_fields["from_staged"]).to eq(true) + + expect(created_user.custom_fields["user_field_#{tennis_field.id}"]).to eq("Nadal") + end end end