用途:指导在 Rails 中创建无数据库支持的模型式对象,使其可直接配合表单、验证、序列化与控制器使用。适用场景包括聚合多个模型的表单对象、搜索/筛选表单、API 请求响应包装、配置对象、联系/邀请表单、引导向导、需要验证的装饰器与服务对象。
主要能力与模块:ActiveModel::Model 为默认选择,包含 API(验证、命名、转换、翻译、属性赋值);ActiveModel::Attributes 提供带类型转换与默认值的类型化属性;ActiveModel::Validations 仅验证;ActiveModel::Callbacks 提供生命周期钩子(需 extend);ActiveModel::Dirty 提供变更追踪;ActiveModel::Serialization 提供序列化输出;ActiveModel::SecurePassword 基于 bcrypt 处理密码。
使用方式:多数表单对象 include ActiveModel::Model,需要类型转换时再加 Attributes;控制器中使用方式与 Active Record 类似,通过 params.require(...).permit(...);在 form_with 中必须手动提供 url:,因为 Active Model 对象默认不可路由。Callbacks 必须用 extend 并自行调用 run_callbacks(:event) { ... }。多模型保存应包在 ActiveRecord::Base.transaction 中。命名与翻译可自定义 model_name,并通过 config/locales 配置 activemodel 下的属性名与错误信息。可使用 ActiveModel::Lint::Tests 验证 API 合规性。
限制与反模式:无数据表时不应继承 ApplicationRecord;不要手写验证逻辑;不要手动实现 initialize 处理哈希;只 include 实际使用的模块;避免在需要 include 的地方误用 extend;多记录保存需事务;Active Model 对象不自带路由,form_with 必须提供 url:。资料未提供收费、价格与平台信息。