写了一个跟随 Rails 大版本的 Gem,代码很简单,并且已经在线上以 Concern 形式稳定跑了一年了(意思就是很安全,放心用)。
另外试玩了一下 GitHub Actions。有个疑问,这个 matrix 配置看文档只能放到 jobs.job_id 底下?我想要多个 jobs 复用,找不到方案,然后就只能 rubocop 和 test 两个 job 都复制一遍同样的 matrix 了。
项目地址:https://github.com/hdgcs/codable
玩了一下,看了一下代码。好玩
GitHub Actions 真不错,主要是提供的虚机性能超级棒,打个 image, Docker Hub 自己拉去 Build 所用的时间是用 GitHub Action 这边 build 后 push 过去 的三倍以上,中间顺带还 push 到了 GitHub 自己的 package 服务
赞呀,但是有个问题,看到你的代码里使用了 find_by!是否有什么业务需求呢?这样如果 code 是重复使用的,不就只能查到最先一条记录了吗
对于 code 字段,该项目当做是更好的标识符,应该唯一,类似 FrendlyId。
项目初衷是解决对配置类表(这类表记录不多,且不常修改)进行快速查找。
顺便在这里展开说一下场景哈,下面是一个快递方式配置的表:
class ShippingService < ApplicationRecord # { id: 1, name: 'Canada Post' } # { id: 2, name: 'UPS' } # { id: 3, name: 'Canpar' } SERVICRS = { cp: 1, ups: 2, canpar: 3, } def self.cp find_by!(id: SERVICES[:cp]) end def cp? id == SERVICRS[:cp] end # ... end
上述需求使用 Codable 来完成的话,只要:
# 1. 添加 code 字段,用字段维护上述硬编码的配置 # 2. 模型引入 Codable 即可 # 使用 ShippingService[:cp] service = ...; service.cp?
查找做了缓存,代码中随时用,不用再做查找优化啥的。
我觉得你举的这个例子在 model 里的常量配置有点像 enum
如果你把 code 字段当成了跟 enum 里不唯一的属性,那你说的就是对的。但是现在的 code 字段是跟 id 一类的标识符属性,那就完全不一样了,enum 不是用来完成这类需求的