jsw: 文章置顶功能

自己开发blog的文章置顶功能
更新于: 2023-08-22 06:29:29

背景

最近在开发项目,有个每天都要看的文档,由于长久不更新,经常被挤到其它地方去了

需求

  • 我的 blog 有一个 posts 表,我希望开发一个文章置顶功能
  • 我使用的框架是 ruby on rails

migrate

rails generate migration AddIsStickyToPosts is_sticky:boolean
rails db:migrate

更新模型

你可以使用 before_save 回调来实现这一点。在 app/models/post.rb 文件中添加以下代码

class Post < ApplicationRecord
  before_save :set_default_sticky

  # ...

  private

  def set_default_sticky
    self.is_sticky ||= false
  end
end

更新控制器和视图

你需要对置顶的文章进行特殊处理,使它们显示在列表的顶部。在控制器中,可以按照 is_sticky 字段进行排序.

class PostsController < ApplicationController
  def index
    @posts = Post.order(is_sticky: :desc, created_at: :desc)
  end

  # ...
end

添加更新接口

namespace :api do
  resources :posts, only: [:update]
end

实际api

### update is_sticky
PUT http://localhost:3020/admin/posts/1
Authorization: {{ token }}
Content-Type: application/json

{
  "is_sticky": false
}

最终效果

我的 blog 后台部分功能截图如下。

置顶功能最终效果图

参考