Skip to content

Commit f96e80e

Browse files
committed
fix/Serialize user with comment after creation
1 parent 8f6851a commit f96e80e

File tree

7 files changed

+19
-14
lines changed

7 files changed

+19
-14
lines changed

app/controllers/comments_controller.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ def create
55
comment = Comment.new(comment_params)
66

77
if comment.save
8-
render json: { comment: comment }
8+
render json: { comment: comment.serialize }
99
else
1010
render json: { errors: comment.errors.full_messages }, status: 400
1111
end

app/javascript/comment.vue

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,18 @@
11
<template>
22
<card>
33
<div style="display: flex;">
4-
<img style="border-radius: 50%;" src="https://media-exp1.licdn.com/dms/image/C4D03AQFDEttQjYQSbA/profile-displayphoto-shrink_200_200/0?e=1593648000&v=beta&t=V16a0Z3adcm8E22knjzE7dqvUddTkBgJj0g6-6Zstt4" height="48" width="48" />
5-
<div style="margin-left: 12px; margin-top: 8px;">
6-
<span style="display: block; font-weight: bold; font-size: 14px; font-family: Helvetica, sans-serif;">{{ comment.user_name }}</span>
7-
<span style="font-size: 12px; color: gray;">54 seconds ago</span>
8-
</div>
9-
</div>
4+
<user-preview :user="comment.user" :date="comment.created_at"/>
5+
</div>
106
<span class="comment--body">{{ comment.body }}</span>
117
</card>
128
</template>
139

1410
<script>
1511
import Card from './card';
12+
import UserPreview from './user-preview';
1613
1714
export default {
18-
components: { Card },
15+
components: { Card, UserPreview },
1916
2017
props: {
2118
comment: { required: true, type: Object }

app/javascript/snippet-preview.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<card>
33
<a class="snippet-preview--container" :href="snippetUrl">
44
<div class="snippet-preview--author-wrapper">
5-
<user-preview :user="snippet.user" :snippet="snippet"/>
5+
<user-preview :user="snippet.user" :date="snippet.created_at"/>
66
<div>
77
<div style="font-size: 14px;">
88
<span style="display: inline-block; font-family: Helvetica, sans serif; font-weight: lighter;">{{ snippet.language }}</span>

app/javascript/snippet-show.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<div>
33
<card>
44
<div class="snippet-preview--author-wrapper">
5-
<user-preview :user="snippet.user" :snippet="snippet"/>
5+
<user-preview :user="snippet.user" :date="snippet.created_at"/>
66
<div>
77
<div style="font-size: 14px;">
88
<span style="display: inline-block; font-family: Helvetica, sans serif; font-weight: lighter;">{{ snippet.language }}</span>

app/javascript/user-preview.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<a :href="`/users/${user.id}`">
88
<span class="user-preview--summary-name">{{ user.name }}</span>
99
</a>
10-
<span v-if="snippet" class="user-preview--summary-time-ago">{{ snippet.created_at }}</span>
10+
<span v-if="date" class="user-preview--summary-time-ago">{{ date }}</span>
1111
<span v-else class="user-preview--summary-time-ago">@{{ user.name }}</span>
1212
</div>
1313
</div>
@@ -17,7 +17,7 @@
1717
export default {
1818
props: {
1919
user: { type: Object, required: true },
20-
snippet: { type: Object, required: false }
20+
date: { type: String, required: false }
2121
}
2222
}
2323
</script>

app/models/comment.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@ class Comment < ApplicationRecord
44

55
validates_presence_of :body
66

7+
def serialize
8+
CommentSerializer.new(self).to_h
9+
end
10+
711
def user_name
812
user.name
913
end
Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
class CommentSerializer < ActiveModel::Serializer
2-
attributes :id, :body, :created_at, :user_name
2+
include ActionView::Helpers::DateHelper
3+
4+
attributes :id, :body, :created_at, :user
35

4-
belongs_to :user
6+
def created_at
7+
time_ago_in_words(object.created_at) + ' ago'
8+
end
59
end

0 commit comments

Comments
 (0)