SuperAPI AI 工具集

ecto-changeset-patterns

写作与研究

查看项目

更新于 10-15 22:16

技能介绍

用途:该技能用于指导 Elixir/Phoenix 项目中 Ecto Changeset 的编写,定位为超出基础 CRUD 的 changeset 工作,如在编写多个 changeset、使用 cast_assoc 或条件校验前调用。

主要能力与规则:按操作定义独立的命名 changeset,如 registration_changeset、email_changeset、password_changeset;在 cast_assoc 子 changeset 中不要要求外键字段,因为 cast_assoc 会自动设置;用管道组合 changeset,每个校验步骤为独立可复用函数;unsafe_validate_unique 必须与 unique_constraint 配对,兼顾即时 UI 反馈与竞态安全;使用 update_change/3 在 changeset 内完成 trim、downcase、slugify 等字段转换;接受 opts \ [] 以支持条件校验,按调用点切换哈希或唯一性检查;在校验层而非 context 函数中校验,校验逻辑靠近 schema。

边界设计:changeset 函数应保持为纯数据转换,attrs 进、changeset 出;持久化在 context 中通过 Repo 完成,而非在 schema 模块中进行插入。

工作流:为新 schema 添加 changeset 时,先按操作定义命名 changeset,再将校验拆成小型可复用私有函数用管道组合,接着添加唯一性校验(unsafe_validate_unique 配 unique_constraint),随后在 changeset 内用 update_change/3 做字段转换,最后在 iex -S mix 中做冒烟测试或运行 changeset 测试验证。

常见陷阱:不要在 cast_assoc 子 changeset 中要求 :post_id;不要对所有操作用同一个 changeset;不要单独使用 unsafe_validate_unique;不要在控制器中 trim/downcase;不要硬编码哈希或唯一性行为;不要在 context 函数中校验;不要 cast 虚拟的 :password 后忘记哈希。

集成:相关技能包括 ecto-essentials(schema、查询与迁移基础)、ecto-nested-associations(深层嵌套结构中的 cast_assoc)、testing-essentials(使用 errors_on/1 辅助的 changeset 测试)、apply-ecto-conventions(对既有代码强制 changeset 约定)。各技能可独立使用。具体安装与调用方式暂未提供。