Rails字符串类型枚举是否会生成对应方法?附代码示例咨询
关于 Rails Enum 自动生成方法的解答
当然会!Rails 的 ActiveRecord Enum 特性设计得相当人性化,你定义的这段 speed 枚举代码,会自动帮你生成一系列实用的实例方法和类方法,完全不用自己手动实现。
自动生成的实例方法
- 状态查询方法:就是你提到的
car.too_fast?和car.too_slow?,调用后会返回布尔值,用来快速判断当前Car实例的speed是否对应这个状态。比如car.too_fast?就等价于底层的数值判断,Rails 会自动帮你处理字符串和数值的映射关系。 - 立即保存的状态设置方法:
car.too_fast!和car.too_slow!,调用后会直接把实例的speed设置为对应状态,并且自动触发数据库保存操作,不用再手动调用save。 - 仅修改内存的状态设置方法:不带感叹号的
car.too_fast和car.too_slow,只会修改内存中的属性值,不会同步到数据库,需要你手动调用car.save或者car.save!才会持久化更改。
自动生成的类方法
除了实例方法,还会生成类级别的快捷查询方法:
Car.too_fast:直接返回所有speed为 "too fast" 的Car记录集合,相当于Car.where(speed: Car.speeds["too fast"])的简化写法。Car.too_slow:同理,返回所有对应状态的记录。
额外小提示
你还可以通过 Car.speeds 查看整个枚举的键值对映射,返回的就是你定义的 {"too fast": 0, "too slow": 1} 哈希,方便你在其他地方引用枚举的键或值。
内容的提问来源于stack exchange,提问作者Mike Glaz
相关产品推荐
相关产品推荐

