我当前的项目中有一个User model, 大体如下:
ruby 代码
- class User < ActiveRecord::Base
- validates_uniqueness_of :username, :email
- end
一般对user对象的修改主要有如下两种场景:
- 修改用户的基本信息,如email, nickname, ......
- 当用户上传文件到自己的空间时,需要更新user的disk_used属性
本可以用如下代码完成disk_used属性的更新:
ruby 代码
-
-
- current_user.disk_used = current_user.disk_used + total_file_size
- current_user.save
这段代码看起来好像没什么问题,但细想起来,每次user.save之前都要执行所有的validation, 对于一般的validation还可以接受,可是对于validates_uniqueness_of 这种validation很可能导致性能问题,众所周知,validates_uniqueness_of每次都要发出一次select请求, 更糟糕的是我们的应用中用户会频繁的上传文件。另一方面,每次只更新user的disk_used属性,并不需要执行所有的validation.
这时候update_attribute派上用场了:
ruby 代码
-
-
- current_user.update_attribute(:disk_used, current_user.disk_used + total_file_size)
上面的代码不但提升了性能,而且更加简洁,更重的是它使得代码的意图更加清晰:只更新disk_used属性(区别于修改用户基本信息的场景)。我们可以更近一步使代码更加清晰:
ruby 代码
- class User < ActiveRecord::Base
- def increase_disk_used(file_size)
- update_attribute(:disk_used, disk_used + file_size)
- end
- end
-
-
-
- current_user.increase_disk_used(total_file_size)
分享到:
相关推荐
c语言中不常用的知识,__attribute__的使用方法
在学习linux内核代码及一些开源软件的源码,经常可以看到有关__attribute__的相关使用。本文结合自己的学习经历,较为详细的介绍了__attribute__相关语法及其使用。
attribute_用法_section_部分.doc
__attribute__ - NSHipster
car_attribute.zip
此代码仅供参考没有后台管理表格1.8版本下可用 ...2.eav_attribute,eav_attribute_group,eav_attribute_set,eav_entity_attribute,eav_entity_type 每个表多一条数据。 作者网站:http://www.sharpmagento.com/
zencart stock_by_attribute_1.5.3按属性购买,球衣电商网站常用的。This add-on is based on a Zen Cart contribution by dafonz (products_with_attributes_stock), which was adapted by danielcor for Zen Cart ...
python库,解压后可用。 资源全名:trytond_product_attribute-4.6.0-py3-none-any.whl
资源来自pypi官网。 资源全名:trytond_product_attribute-4.6.0-py3-none-any.whl
资源来自pypi官网。 资源全名:trytond_product_attribute-4.8.1-py3-none-any.whl
资源分类:Python库 所属语言:Python 资源全名:easy_module_attribute_getter-0.9.13-py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
资源分类:Python库 所属语言:Python 资源全名:easy_module_attribute_getter-0.9.11-py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
GNU_CC中的attribute有助于你对于gnu c中的内容深入理解
利用AE+C#实现 框选要素 弹出要素属性值的地图查询功能
51单片机C语言编程中的绝对定位问题,对MCU开发者有帮助
利用ArcGIS Server的ADF编写属性查询的代码
您可以使用store_attribute方法将具有类型的其他访问器添加到模型上的现有商店。 store_attribute ( store_name , name , type , options ) 在哪里: store_name商店的名称。 name商店访问者的名称。 type一个...