jsw: 给各模块添加封面图功能
给不同的模块添加封面图功能
大体思路
- 添加字段: 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
实现结果
在后台管理系统里的效果图