Active Record 建模时我会优先检查的几件事

索引、唯一性、状态字段、scope 和数据完整性。

Active Record 让数据库操作非常顺手,但也容易让人忽略数据模型本身的约束。我的习惯是先从查询路径倒推表结构:哪些字段会被频繁过滤,哪些字段会被排序,哪些关联需要预加载。

如果业务上要求唯一,比如用户邮箱、文章 slug、订单号,我会同时写 Rails validation 和数据库 unique index。validation 提供更友好的错误信息,数据库约束负责兜底,二者解决的是不同层面的可靠性。

状态字段要尽量少而明确。比如 draft、published、archived 这样的状态适合用字符串或枚举表达,但每个状态应该有清楚的进入条件和退出条件。状态切换最好集中在模型方法里,而不是散落在 controller 和 job 里。

scope 适合表达会复用的查询语义,例如 published、recent_first、active。好的 scope 读起来像业务语言,而不是一段临时拼出来的 SQL 条件。

最后我会看迁移里的索引是否匹配真实读取路径。很多 Rails 性能问题并不是框架慢,而是数据增长以后,原本没有成本感的查询突然变成了全表扫描。