`
sean
  • 浏览: 16320 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

巧用update_attribute

阅读更多
我当前的项目中有一个User model, 大体如下:
ruby 代码
 
  1. class User < ActiveRecord::Base  
  2.   validates_uniqueness_of :username:email  
  3. end  
一般对user对象的修改主要有如下两种场景:
  1. 修改用户的基本信息,如email, nickname, ......
  2. 当用户上传文件到自己的空间时,需要更新user的disk_used属性
本可以用如下代码完成disk_used属性的更新:
ruby 代码
 
  1. # uploading files ....  
  2. # calculating total file size.....  
  3. current_user.disk_used = current_user.disk_used + total_file_size  
  4. current_user.save  
这段代码看起来好像没什么问题,但细想起来,每次user.save之前都要执行所有的validation, 对于一般的validation还可以接受,可是对于validates_uniqueness_of 这种validation很可能导致性能问题,众所周知,validates_uniqueness_of每次都要发出一次select请求, 更糟糕的是我们的应用中用户会频繁的上传文件。另一方面,每次只更新user的disk_used属性,并不需要执行所有的validation.

这时候update_attribute派上用场了:
ruby 代码
 
  1. # uploading files .....  
  2. # calculating total_file_size....  
  3. current_user.update_attribute(:disk_used, current_user.disk_used + total_file_size)  
上面的代码不但提升了性能,而且更加简洁,更重的是它使得代码的意图更加清晰:只更新disk_used属性(区别于修改用户基本信息的场景)。我们可以更近一步使代码更加清晰:
ruby 代码
 
  1. class User < ActiveRecord::Base  
  2.   def increase_disk_used(file_size)  
  3.       update_attribute(:disk_used, disk_used + file_size)  
  4.   end  
  5. end  
  6.   
  7. #uploading files ....  
  8. #calculating total_file_size  
  9. current_user.increase_disk_used(total_file_size)  
分享到:
评论

相关推荐

    __attribute__ - NSHipster.pdf

    例如,使用 __attribute__((availability(macosx,introduced=10.4,deprecated=10.6))) 指令可以指定函数的可用性信息,而使用 __attribute__((noreturn, format(printf, 1, 2))) 指令可以指定函数的返回性质和格式...

    GCC的__attribute__扩展功能

    具体使用格式如下: __attribute__((format(printf,m,n))) 其中参数 m 与 n 的含义为:m:第几个参数为格式化字符串(format string);n:参数集合中的第一个,即参数“…”里的第一个参数在函数参数总数排在第几,...

    __attribute__

    ### __attribute__ 在 C 语言中的使用方法 #### 一、引言 在 C 语言中,`__attribute__` 是 GNU 编译器集合 (GCC) 的一个扩展特性,它允许开发人员向函数、变量或类型添加元数据,从而增强编译时的错误检查能力并...

    GNU_CC中的attribute

    因此,如果`myprint`接受一个整型`l`和一个格式字符串`format`以及可变参数,作为成员函数时,我们应使用`__attribute__((format(printf, 2, 3)))`,因为`this`指针占用了第一个参数的位置。 以下是一个简单的示例...

    attribute详细介绍

    ### Attribute详解:深入理解GCC属性 #### 概述 在Linux开发及GCC(GNU Compiler Collection)的使用过程中,深入理解`__...因此,在进行Linux开发或使用GCC进行编译时,熟练掌握`__attribute__`的使用是非常必要的。

    attribute_用法_section_部分.doc

    attribute_用法_section_部分.doc

    product_attribute_grid_1-1-1.zip

    《Zencart多属性零售批发插件:Attribute Grid 1.1.1详解及应用》 在电子商务领域,Zencart作为一个开源的购物车系统,因其灵活性和可扩展性深受开发者和商家的喜爱。然而,为了满足不同的商业需求,尤其是对于具有...

    Magento 1.8版本下eav模型demo

    此代码仅供参考没有后台管理表格1.8版本下可用 ...2.eav_attribute,eav_attribute_group,eav_attribute_set,eav_entity_attribute,eav_entity_type 每个表多一条数据。 作者网站:http://www.sharpmagento.com/

    AttributeQuery.rar_AttributeQuery_arcgis

    4. ArcPy库的使用,进行地图服务的编程操作 5. ArcGIS Server REST API的接口调用和数据交互 6. 地图服务的Web应用程序集成 7. 地理空间数据的分析和查询,如空间关系查询 理解并掌握这些知识,将有助于开发和优化...

    attributeQuery.rar_AttributeQuery

    "attributeQuery.rar_AttributeQuery" 提供的资源是关于如何利用ArcGIS Engine (AE) 和C#编程语言实现一个特定类型的查询——框选要素并弹出其属性值的查询功能。这个功能对地图数据的分析和应用非常实用,尤其在...

    stock_by_attribute_1.5.3.zip

    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 ...

    对于图像属性数据集的分类(SVM,MLP)_Attribute_classfication.zip

    对于图像属性数据集的分类(SVM,MLP)_Attribute_classfication

    rsl.rar_RSL Matlab_attribute reduction_rsl

    标题中的“rsl.rar_RSL Matlab_attribute reduction_rsl”暗示了这是一个与RSL相关的MATLAB代码库,专注于属性约减技术。RSL通常代表Reduced Set Learning或Relevance Set Learning,这是一种在机器学习和数据挖掘...

    Python库 | trytond_product_attribute-4.6.0-py3-none-any.whl

    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.6.0-py3-none-any.whl

    PyPI 官网下载 | trytond_product_attribute-4.8.1-py3-none-any.whl

    资源来自pypi官网。 资源全名:trytond_product_attribute-4.8.1-py3-none-any.whl

    car_attribute.zip

    "car_attribute.zip" 是一个与车辆属性识别相关的压缩文件,其中包含了多个Python脚本和一个配置文件,很可能是用于训练和评估一个深度学习模型。标签 "resnet" 暗示了这个项目可能使用了ResNet(残差网络)架构,这...

    Python库 | easy_module_attribute_getter-0.9.13-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

Global site tag (gtag.js) - Google Analytics