diff --git a/app/controllers/api/v1/application_controller.rb b/app/controllers/api/v1/application_controller.rb index c82fa55..b059e54 100644 --- a/app/controllers/api/v1/application_controller.rb +++ b/app/controllers/api/v1/application_controller.rb @@ -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 diff --git a/app/controllers/api/v1/dashboard_controller.rb b/app/controllers/api/v1/dashboard_controller.rb index a3b8e71..df522ad 100644 --- a/app/controllers/api/v1/dashboard_controller.rb +++ b/app/controllers/api/v1/dashboard_controller.rb @@ -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 diff --git a/app/controllers/api/v1/posts_controller.rb b/app/controllers/api/v1/posts_controller.rb index bce0ca1..36123ac 100644 --- a/app/controllers/api/v1/posts_controller.rb +++ b/app/controllers/api/v1/posts_controller.rb @@ -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 diff --git a/app/controllers/api/v1/timeline_controller.rb b/app/controllers/api/v1/timeline_controller.rb index cc94185..3911aef 100644 --- a/app/controllers/api/v1/timeline_controller.rb +++ b/app/controllers/api/v1/timeline_controller.rb @@ -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 diff --git a/app/serializers/each_post_serializer.rb b/app/serializers/each_post_serializer.rb new file mode 100644 index 0000000..4aa3ab4 --- /dev/null +++ b/app/serializers/each_post_serializer.rb @@ -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 diff --git a/app/serializers/post_serializer.rb b/app/serializers/post_serializer.rb index 8ae5bce..0d3ded8 100644 --- a/app/serializers/post_serializer.rb +++ b/app/serializers/post_serializer.rb @@ -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 diff --git a/app/serializers/share_instance_serializer.rb b/app/serializers/share_instance_serializer.rb index 5a7b9e3..b278d9a 100644 --- a/app/serializers/share_instance_serializer.rb +++ b/app/serializers/share_instance_serializer.rb @@ -2,5 +2,5 @@ class ShareInstanceSerializer < ActiveModel::Serializer attributes :id, :description, :sharable_type - belongs_to :sharable, serializer: PostSerializer + belongs_to :sharable, serializer: EachPostSerializer end