用途:为 Elixir 应用提供 Ash 声明式框架的使用规范,用于建模领域资源、域、动作、查询、变更集与策略。使用前应先阅读官方文档。
主要能力与用法: 代码接口:在域中定义接口,避免在 LiveView/Controller 中直接调用 Ash.get!/2,例如 define :get_post, action: :read, get_by: [:id];调用时优先用 query 选项而非手动构建 Ash.Query,如 MyApp.Blog.list_posts!(query: [filter: [status: :published], sort: [published_at: :desc], limit: 10], load: [author: :profile, comments: [:author]])。授权函数自动生成,如 can_create_post?(actor)。LiveView 中传 scope: socket.assigns.scope,钩子中用 context 参数。 动作:创建命名具体的动作而非通用 CRUD,业务逻辑放入动作定义;同事务逻辑用 before_action/after_action,外部调用用 before_transaction/after_transaction。 查询:Ash.Query.filter/2 是宏,需 require Ash.Query,再链式 filter、sort、load、limit、read!。 错误处理:预期成功时用 ! 变体,错误类优先级为 Forbidden > Invalid > Framework > Unknown。 校验与变更:内置 validate compare/match/one_of,支持条件校验与 only_when_valid?;变更用 set_attribute、relate_actor、atomic_update,自定义变更/校验/准备优先用模块而非匿名函数。 准备:用 prepare build 修改查询,支持条件准备。 数据层与迁移:可指定 AshPostgres.DataLayer 或 ETS 等;修改资源后运行 mix ash.codegen <name>,开发期用 --dev。 测试:通过代码接口测试,非授权重点时用 authorize?: false,用 Ash.can? 测策略,并发测试用唯一值避免死锁。
限制:资料未提供版本、收费、平台与效果信息;具体 API 行为以官方文档为准。