Ash项目中的动作调用选项全解析
2025-07-08 16:58:52作者:谭伦延
概述
在Ash框架中,通过代码接口调用动作时,开发者可以使用多种选项来定制行为。这些选项提供了强大的灵活性,但同时也带来了发现和理解上的挑战。本文将全面解析Ash资源动作调用时可用的各种选项,帮助开发者充分利用框架提供的功能。
基本动作类型与选项
Ash框架支持多种基本动作类型,每种类型都有其特定的选项集:
- 读取动作(Read):用于查询数据
- 创建动作(Create):用于新建记录
- 更新动作(Update):用于修改现有记录
- 销毁动作(Destroy):用于删除记录
- 自定义动作(Action):开发者定义的特殊操作
通用选项详解
所有动作类型都支持以下通用选项:
:api:指定要使用的Ash API模块:timeout:设置操作超时时间:tracer:用于跟踪操作的模块:verbose?:启用详细日志记录:actor:设置执行操作的当前用户:authorize?:是否执行授权检查:return_notifications?:是否返回操作产生的通知:tenant:多租户环境下的租户标识
读取动作特有选项
读取动作(read)除了通用选项外,还支持以下特殊选项:
-
:query:接受关键字列表形式的查询参数,可包含::filter:数据过滤条件:sort:结果排序规则:limit:返回结果数量限制:offset:结果偏移量:select:指定返回字段:load:预加载关联关系:distinct:去重设置
-
:page:分页相关参数 -
:count:是否返回总数统计 -
:after:分页游标(用于基于游标的分页) -
:before:分页游标(用于基于游标的分页)
变更动作选项
创建(create)、更新(update)和销毁(destroy)动作共享以下选项:
:changeset:预构建的变更集:params:原始参数(自动转换为变更集):select:指定返回字段:load:操作后预加载关联关系:return_changeset?:是否返回变更集而非结果
创建和更新动作特有选项:
:upsert?:是否执行upsert操作:upsert_identity:upsert操作使用的唯一标识
查询构建选项
当通过query参数传递选项时,可以使用Ash.Query.build/3支持的所有选项,包括:
- 复杂过滤条件构建
- 聚合计算配置
- 子查询设置
- 计算字段定义
- 高级排序规则
最佳实践建议
- 性能优化:合理使用
:select和:load选项避免过度获取数据 - 安全考虑:始终设置
:actor并启用:authorize?选项 - 调试技巧:在开发时启用
:verbose?选项查看详细执行过程 - 分页策略:根据数据量选择合适的
:page或游标分页方式 - 变更控制:利用
:return_changeset?在复杂操作中获取中间状态
总结
Ash框架提供了丰富的动作调用选项,这些选项共同构成了框架灵活性的基础。理解并合理使用这些选项,可以显著提高开发效率和应用程序性能。开发者应当根据具体场景选择合适的选项组合,并在项目文档中记录重要的选项使用决策。
登录后查看全文
热门项目推荐
相关项目推荐
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0191
cann-learning-hubCANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。Jupyter Notebook0118
Step-3.7-FlashStep-3.7-Flash是一个拥有 1980 亿参数的稀疏混合专家(MoE)视觉语言模型,由 1960 亿参数的语言主干网络和 18 亿参数的视觉编码器组合而成,具备原生图像理解能力。Python00
JoyAI-EchoJoyAI-Echo,这是一个独立的、仅用于推理的版本,旨在实现分钟级多镜头音视频生成。它采用了经过蒸馏的DMD生成器、配对的跨模态记忆以及故事级别的一致性。其性能的核心在于,一个跨模态视听记忆库能够在长达五分钟的视频中保持角色外观和语音音色的一致性。同时,一个训练后处理流程将基于记忆的强化学习与分布匹配蒸馏相结合,实现了7.5倍的速度提升,显著增强了视觉质量和对齐效果。00
fun-rec推荐系统入门教程,在线阅读地址:https://datawhalechina.github.io/fun-rec/Python03
so-large-lm大模型基础: 一文了解大模型基础知识01
项目优选
收起
暂无描述
Dockerfile
765
4.97 K
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
857
1.93 K
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
680
1.33 K
Ascend Extension for PyTorch
Python
719
879
deepin linux kernel
C
32
16
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
456
438
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.08 K
1.1 K
华为昇腾面向大规模分布式训练的多模态大模型套件,支撑多模态生成、多模态理解。
Python
151
252
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
303
118
昇腾LLM分布式训练框架
Python
178
220