`

Rails2中的诡异(3)

阅读更多
应用场景:一个组(Group)有多张图片(GroupPicture),图片上传处理我用的是paperclip插件。我在上传和删除图片时,顺便在Group中更新一下Group的空间使用情况,我使用Group的after_save和before_destroy。
上代码:
# RAILS_GEM_VERSION = '2.2.2'
class GroupPicture < ActiveRecord::Base
   belongs_to :group


  has_attached_file :picture, :styles => {:thumb => "120x90>" },
    :path => ":rails_root/public/uploads/:class/:attachment/:id/:style/picture.:extension",
    :url => "/uploads/:class/:attachment/:id/:style/picture.:extension",
    :default_url => "/uploads/:class/:attachment/:style/missing.jpg"
  validates_attachment_size :picture, :less_than => 1.megabyte

   after_save :add_group_file_size # 更新群组空间使用情况
   before_destroy :reduce_group_file_size # 更新群组空间使用情况

   private
  # 更新所在群组空间使用情况
  # for after_save
  def add_group_file_size
    if self.picture_file_size
      self.group.group_file_size += self.picture_file_size
      self.group.save(false)
    end
    
  end

  # 更新群组空间使用情况
  # for before_destroy
  def reduce_group_file_size
    if self.picture_file_size
      self.group.group_file_size -= self.picture_file_size
      self.group.save(false)
    end
  end
end


上面的代码 你觉得有什么问题吗?结果会如人愿吗?不会,在删除图片后,Group的空间使用情况还是原样,在方法reduce_group_file_size头中输出self.picture_file_size,是空的,什么也没有!

怎么会这样呢?我试着在方法reduce_group_file_size头中输出group_picture的其它属性,如title,created_at之类的,是有值的,为什么就是picture_file_size空空如也???

解决方法:
将代码:
   after_save :add_group_file_size # 更新群组空间使用情况
   before_destroy :reduce_group_file_size # 更新群组空间使用情况

放在
  has_attached_file :picture, :styles => {:thumb => "120x90>" },
    :path => ":rails_root/public/uploads/:class/:attachment/:id/:style/picture.:extension",
    :url => "/uploads/:class/:attachment/:id/:style/picture.:extension",
    :default_url => "/uploads/:class/:attachment/:style/missing.jpg"
  validates_attachment_size :picture, :less_than => 1.megabyte

的前面就解决问题了。

真是诡异。
0
0
分享到:
评论

相关推荐

    rails2-sample

    从给定的文件信息来看,我们正在探讨的是一本关于Ruby on Rails的书籍,书名为《Simply Rails2》,作者是Patrick Lenz。本书旨在为初学者提供深入理解Ruby on Rails框架的指南,从基础概念到高级主题均有涵盖,是...

    Flexible Rails: Flex3 on Rails2

    ### Flexible Rails: Flex3 on Rails2 #### 关于Flexible Rails 本书《Flexible Rails: Flex 3 on Rails 2》由Peter Armstrong撰写,旨在探讨如何结合使用Flex 3和Rails 2来开发高效的富互联网应用程序(Rich ...

    Ruby on Rails中文指南

    2. **模型(Models)**:模型代表了数据库中的数据和业务逻辑。Ruby on Rails使用ActiveRecord,一个ORM(对象关系映射)库,使得与数据库交互变得简单。你可以通过定义类和方法来创建、更新、查询数据。 3. **视图...

    Rails的中文乱码问题

    2. **文件编码**:Rails项目中的文件(如控制器、模型、视图)如果用非UTF-8编码保存,可能导致读取时乱码。使用UTF-8无BOM格式保存所有文本文件。 3. **HTTP头设置**:Web服务器或Rails应用程序需要设置正确的字符...

    使用Aptana+Rails开发Rails Web应用(中文)

    安装过程中,遵循提示进行,确保选择自定义安装并勾选Rails相关的插件,以便在Aptana中获得对Rails的全面支持。 安装完成后,打开Aptana Studio,创建一个新的Rails项目。在“File”菜单中选择“New”然后点击...

    rails指南 中文版

    1. **ActiveRecord**:这是Rails框架中的ORM(Object-Relational Mapping)组件,它负责处理数据库操作。通过ActiveRecord,开发者可以使用面向对象的方式来操作数据,而无需编写SQL语句。 2. **ActionController**...

    Rails 3 in Action

    3. **MVC架构**:Rails采用Model-View-Controller架构,书中详细解释了模型(Model)、视图(View)和控制器(Controller)之间的交互与职责。 4. **路由**:Rails的路由系统允许灵活地定义URL到控制器动作的映射,...

    Ruby on Rails Guides v2 - Ruby on Rails 4.2.5

    ### Ruby on Rails Guides v2 - Ruby on Rails 4.2.5 #### 一、重要概念及基础假设 - **重要概念**:本指南旨在帮助读者深入理解Ruby on Rails(以下简称Rails)4.2.5版本的核心功能与最佳实践。 - **基础假设**:...

    rails版本区别

    在Rails 3中,配置项通过类继承自`Rails::Application`,并且可以更灵活地进行定制。 ### 路由的改进 在路由处理上,Rails 3引入了更加简洁且直观的语法,使得路由定义变得更加容易理解。在Rails 2中,定义资源...

    Rails3常用命令行命令

    在本文中,我们将深入探讨Rails3中的常用命令,帮助你更高效地进行开发工作。 首先,新建一个Rails项目是开发的起点。你可以使用以下命令创建一个新的工程: ```bash rails new 工程名 ``` 这会生成一个包含所有...

    [Rails 常用插件简介]CRUD Generator 2

    **Rails 常用插件简介 - CRUD Generator 2** 在Ruby on Rails框架中,开发过程中经常需要创建、读取、更新和删除(CRUD)数据。为了提高开发效率,开发者通常会使用各种插件来自动化这个过程。CRUD Generator 2就是...

    Rails 中mongrel的安装

    2. **Ruby编写**: 作为纯Ruby实现的服务器,Mongrel与Rails框架集成紧密,减少了中间层带来的额外复杂性。 3. **轻量级**: Mongrel体积小巧,启动快速,适合开发和测试环境。 ** 安装Mongrel ** 在Rails项目中安装...

    Rails101_by_rails4.0

    此外,书中还介绍了一些Rails中的高级概念,如Strong Parameters(强参数),它在Rails 4.0版本中引入,用于解决之前版本中的参数篡改问题,从而帮助开发者安全地处理外部提交的数据。 通过一系列的教学内容,包括...

    agile web development with rails2代码

    该压缩包文件包含了该书的源代码示例,帮助读者深入理解Rails2版本中的各种开发实践和技术。 在Rails2这个版本中,主要知识点包括: 1. **MVC架构**:Rails遵循Model-View-Controller(MVC)设计模式,将业务逻辑...

    centOS Rails3环境搭建

    ### CentOS环境下Rails 3开发环境搭建详解 #### 一、准备工作与环境配置 在开始部署Rails 3开发环境之前,我们需要确保系统上已经安装了一些基本的软件包和工具。这一步骤对于后续的Ruby和Rails安装至关重要。 ##...

    Rails.Angular.Postgres.and.Bootstrap.2nd.Edition

    Chapter 3. Secure the User Database with Postgres Constraints Chapter 4. Perform Fast Queries with Advanced Postgres Indexes Chapter 5. Create Clean Search Results with Bootstrap Components Chapter 6....

    Rails 101 入门电子书

    - 如何在Rails中实现RESTful接口。 - **案例分析**: - 分析一个典型的RESTful应用示例。 #### 九、练习作业2-在Group里面发表文章-双层RESTFul - **目标**: - 在Group中添加Post功能。 - **实现过程**: - 创建...

    Rails项目源代码

    这个Rails项目提供了学习和研究Web开发的机会,特别是对于Ruby on Rails新手,可以通过阅读和理解源代码来提升技能,了解实际应用中Rails的用法。同时,对于有经验的开发者,这个项目也可以作为一个起点,进行二次...

Global site tag (gtag.js) - Google Analytics