jsw: 给各模块添加封面图功能

给不同的模块添加封面图功能
更新于: 2024-07-12 09:50:53

大体思路

  • 添加字段: covers
  • 内容是 pids

GPT对话

我想给我的几张表添加 cover 封面图功能,可能有0或者多张(至多10张)
1. 我有 posts/experiences 表需要添加
2. 我存储到后端的图片为 pid 形式(32位的字符串)
3. 我使用的是 ruby on rails
4. model 里的 cover_pids 部分考虑多表复用(DRY)

给出实现步骤

公用模块 Concern

文件用这个 app/models/concerns/cover_pids_concern.rb

module CoverPidsConcern
  extend ActiveSupport::Concern

  included do
    serialize :cover_pids, Array

    validate :validate_cover_pids
  end

  private

  def validate_cover_pids
    if cover_pids.length > 10
      errors.add(:cover_pids, "不能超过10张封面图")
    end

    cover_pids.each do |pid|
      unless valid_pid?(pid)
        errors.add(:cover_pids, "包含无效的pid: #{pid}")
      end
    end
  end

  def valid_pid?(pid)
    pid.is_a?(String) && pid.length == 32 # 简单验证长度为32的字符串
  end
end

添加字段

使用这个 AddCoverPidsTo 到目标的表里。

# 添加字段
rails generate migration AddCoverPidsToPosts cover_pids:text
rails generate migration AddCoverPidsToExperiences cover_pids:text
# migrate
rails db:migrate

添加之前的 Concern

class Post < ApplicationRecord
  include CoverPidsConcern
  
  # 其他代码...
end

实现结果

在后台管理系统里的效果图

效果图