mirror of
https://github.com/discourse/discourse.git
synced 2025-06-06 23:07:28 +08:00
FIX: Undefined method when serializing a user
Apparently is is possible to have a user without a user_profile. This fix will return nil for any user_profile fields during serialization (like the after delete web hook) instead of blowing up.
This commit is contained in:
@ -220,15 +220,15 @@ class UserSerializer < BasicUserSerializer
|
|||||||
end
|
end
|
||||||
|
|
||||||
def bio_raw
|
def bio_raw
|
||||||
object.user_profile.bio_raw
|
object.user_profile&.bio_raw
|
||||||
end
|
end
|
||||||
|
|
||||||
def bio_cooked
|
def bio_cooked
|
||||||
object.user_profile.bio_processed
|
object.user_profile&.bio_processed
|
||||||
end
|
end
|
||||||
|
|
||||||
def website
|
def website
|
||||||
object.user_profile.website
|
object.user_profile&.website
|
||||||
end
|
end
|
||||||
|
|
||||||
def website_name
|
def website_name
|
||||||
@ -246,7 +246,7 @@ class UserSerializer < BasicUserSerializer
|
|||||||
end
|
end
|
||||||
|
|
||||||
def location
|
def location
|
||||||
object.user_profile.location
|
object.user_profile&.location
|
||||||
end
|
end
|
||||||
|
|
||||||
def can_edit
|
def can_edit
|
||||||
@ -300,7 +300,7 @@ class UserSerializer < BasicUserSerializer
|
|||||||
end
|
end
|
||||||
|
|
||||||
def bio_excerpt
|
def bio_excerpt
|
||||||
object.user_profile.bio_excerpt(350 , keep_newlines: true, keep_emoji_images: true)
|
object.user_profile&.bio_excerpt(350 , keep_newlines: true, keep_emoji_images: true)
|
||||||
end
|
end
|
||||||
|
|
||||||
def include_suspend_reason?
|
def include_suspend_reason?
|
||||||
@ -470,7 +470,7 @@ class UserSerializer < BasicUserSerializer
|
|||||||
end
|
end
|
||||||
|
|
||||||
def profile_view_count
|
def profile_view_count
|
||||||
object.user_profile.views
|
object.user_profile&.views
|
||||||
end
|
end
|
||||||
|
|
||||||
def time_read
|
def time_read
|
||||||
|
@ -250,4 +250,17 @@ describe UserSerializer do
|
|||||||
expect(json[:user_api_keys][2][:id]).to eq(user_api_key_2.id)
|
expect(json[:user_api_keys][2][:id]).to eq(user_api_key_2.id)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context "with missing user profile" do
|
||||||
|
fab!(:user) { Fabricate(:user) }
|
||||||
|
|
||||||
|
it "does not throw an error" do
|
||||||
|
id = user.id
|
||||||
|
UserProfile.delete(id)
|
||||||
|
user_b = User.find(id)
|
||||||
|
json = UserSerializer.new(user_b, scope: Guardian.new(user_b), root: false).as_json
|
||||||
|
|
||||||
|
expect(json[:bio_raw]).to eq nil
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
Reference in New Issue
Block a user