#11 Add each post serializer for post list apis

This commit is contained in:
2015-10-10 11:33:38 +08:00
parent 375166b2cd
commit 5149be2531
7 changed files with 21 additions and 11 deletions
@@ -40,7 +40,7 @@ class Api::V1::ApplicationController < ActionController::Base
end
def load_post
@target_post = Post.find_by id: params[:post_id]
@target_post = Post.find_by id: params[:post_id] || params[:id]
render json: {msg: '不能找到该文章'}, status: 404 unless @target_post
end
@@ -5,14 +5,14 @@ class Api::V1::DashboardController < Api::V1::ApplicationController
def top
case params[:type]
when 'web_page'
render json: Post.where(type: 'WebPage').order(viewed_times: :desc).page(params[:page]), each_serializer: PostSerializer
render json: Post.where(type: 'WebPage').order(viewed_times: :desc).page(params[:page]), each_serializer: EachPostSerializer
else
render json: Post.where(type: 'Article').order(viewed_times: :desc).page(params[:page]), each_serializer: PostSerializer
render json: Post.where(type: 'Article').order(viewed_times: :desc).page(params[:page]), each_serializer: EachPostSerializer
end
end
def top_all
render json: Post.order(viewed_times: :desc).page(params[:page]), each_serializer: PostSerializer
render json: Post.order(viewed_times: :desc).page(params[:page]), each_serializer: EachPostSerializer
end
end
+4 -3
View File
@@ -1,7 +1,7 @@
class Api::V1::PostsController < Api::V1::ApplicationController
before_action :permit_params, :map_post_type, :get_post, only: [:create]
before_action :load_post, only: [:add_viewed_times]
before_action :load_post, only: [:add_viewed_times, :show]
after_action :process_post, only: :create
@@ -20,6 +20,7 @@ class Api::V1::PostsController < Api::V1::ApplicationController
end
def show
render json: @target_post, serializer: PostSerializer
end
def index
@@ -33,12 +34,12 @@ class Api::V1::PostsController < Api::V1::ApplicationController
def liked_posts
ids = Like.where(user_id: @current_user.id).order(:created_at).pluck(:likable_id)
render json: Post.where(id: ids).page(params[:page]), each_serializer: PostSerializer
render json: Post.where(id: ids).page(params[:page]), each_serializer: EachPostSerializer
end
def search
params.permit(:keywords)
render json: Post.where('title LIKE ?',"%#{params[:keywords]}%").page(params[:page]), each_serializer: PostSerializer
render json: Post.where('title LIKE ?',"%#{params[:keywords]}%").page(params[:page]), each_serializer: EachPostSerializer
end
private
@@ -3,11 +3,11 @@ class Api::V1::TimelineController < Api::V1::ApplicationController
skip_before_action :authenticate_user_from_token
def latest
render json: Post.order(created_at: :desc).page(params[:page]), each_serializer: PostSerializer
render json: Post.order(created_at: :desc).page(params[:page]), each_serializer: EachPostSerializer
end
def hottest
render json: Post.order(viewed_times: :desc).page(params[:page]), each_serializer: PostSerializer
render json: Post.order(viewed_times: :desc).page(params[:page]), each_serializer: EachPostSerializer
end
end
+9
View File
@@ -0,0 +1,9 @@
class EachPostSerializer < ActiveModel::Serializer
attributes :id, :viewed_times, :url, :title, :type, :processed, :good_format, :created_at, :likes_count, :comments_count,
:summary, :thumbnail
def thumbnail
object.thumbnail.try(:file).try(:url)
end
end
+1 -1
View File
@@ -1,6 +1,6 @@
class PostSerializer < ActiveModel::Serializer
attributes :id, :viewed_times, :url, :title, :type, :processed, :good_format, :created_at, :likes_count, :comments_count,
attributes :id, :viewed_times, :url, :title, :content, :type, :processed, :good_format, :created_at, :likes_count, :comments_count,
:summary, :thumbnail
def thumbnail
+1 -1
View File
@@ -2,5 +2,5 @@ class ShareInstanceSerializer < ActiveModel::Serializer
attributes :id, :description, :sharable_type
belongs_to :sharable, serializer: PostSerializer
belongs_to :sharable, serializer: EachPostSerializer
end