本周碰到了一个问题,需要重写model的字段的get方法,但在重写方法中,某些情况需要获取该字段原来的值(数据库中值),本来想使用alias先给方法起个别名,然后在重写方法中调用别名,结果报错,这才想ActiveRecord的方法是动态生成的,定义的时候没有该字段的get方法,询问bruce.wu,给出使用model[:attribute]可获取数据库中值的解决办法。
平时查文档感觉rails guide最方便使用,而rails guide对ActiveRecord 的attributes介绍不多,因此总结下这方面的用法备忘。
- model.attributes获取实例的所有属性的hash形式
- model.attributes= 传入hash设置实例的相应属性.
- model[:attribute]获取单个属性的值,注意:这里需要symbol
- model.attributes[attribute] 同上,但attribute为字符串
- model.changed 返回实例是否发生变化
- model.attribute_changed? 实例的该字段是否发生变化
- model.new_record? 实例是否为新添加对象(非数据库中记录)
- model.changes 返回发生变化字段的hash,形式为attribute:[原内容,现内容]