应用场景:一个组(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
的前面就解决问题了。
真是诡异。
分享到:
相关推荐
从给定的文件信息来看,我们正在探讨的是一本关于Ruby on Rails的书籍,书名为《Simply Rails2》,作者是Patrick Lenz。本书旨在为初学者提供深入理解Ruby on Rails框架的指南,从基础概念到高级主题均有涵盖,是...
### Flexible Rails: Flex3 on Rails2 #### 关于Flexible Rails 本书《Flexible Rails: Flex 3 on Rails 2》由Peter Armstrong撰写,旨在探讨如何结合使用Flex 3和Rails 2来开发高效的富互联网应用程序(Rich ...
2. **模型(Models)**:模型代表了数据库中的数据和业务逻辑。Ruby on Rails使用ActiveRecord,一个ORM(对象关系映射)库,使得与数据库交互变得简单。你可以通过定义类和方法来创建、更新、查询数据。 3. **视图...
2. **文件编码**:Rails项目中的文件(如控制器、模型、视图)如果用非UTF-8编码保存,可能导致读取时乱码。使用UTF-8无BOM格式保存所有文本文件。 3. **HTTP头设置**:Web服务器或Rails应用程序需要设置正确的字符...
安装过程中,遵循提示进行,确保选择自定义安装并勾选Rails相关的插件,以便在Aptana中获得对Rails的全面支持。 安装完成后,打开Aptana Studio,创建一个新的Rails项目。在“File”菜单中选择“New”然后点击...
1. **ActiveRecord**:这是Rails框架中的ORM(Object-Relational Mapping)组件,它负责处理数据库操作。通过ActiveRecord,开发者可以使用面向对象的方式来操作数据,而无需编写SQL语句。 2. **ActionController**...
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(以下简称Rails)4.2.5版本的核心功能与最佳实践。 - **基础假设**:...
在Rails 3中,配置项通过类继承自`Rails::Application`,并且可以更灵活地进行定制。 ### 路由的改进 在路由处理上,Rails 3引入了更加简洁且直观的语法,使得路由定义变得更加容易理解。在Rails 2中,定义资源...
在本文中,我们将深入探讨Rails3中的常用命令,帮助你更高效地进行开发工作。 首先,新建一个Rails项目是开发的起点。你可以使用以下命令创建一个新的工程: ```bash rails new 工程名 ``` 这会生成一个包含所有...
**Rails 常用插件简介 - CRUD Generator 2** 在Ruby on Rails框架中,开发过程中经常需要创建、读取、更新和删除(CRUD)数据。为了提高开发效率,开发者通常会使用各种插件来自动化这个过程。CRUD Generator 2就是...
2. **Ruby编写**: 作为纯Ruby实现的服务器,Mongrel与Rails框架集成紧密,减少了中间层带来的额外复杂性。 3. **轻量级**: Mongrel体积小巧,启动快速,适合开发和测试环境。 ** 安装Mongrel ** 在Rails项目中安装...
此外,书中还介绍了一些Rails中的高级概念,如Strong Parameters(强参数),它在Rails 4.0版本中引入,用于解决之前版本中的参数篡改问题,从而帮助开发者安全地处理外部提交的数据。 通过一系列的教学内容,包括...
该压缩包文件包含了该书的源代码示例,帮助读者深入理解Rails2版本中的各种开发实践和技术。 在Rails2这个版本中,主要知识点包括: 1. **MVC架构**:Rails遵循Model-View-Controller(MVC)设计模式,将业务逻辑...
### CentOS环境下Rails 3开发环境搭建详解 #### 一、准备工作与环境配置 在开始部署Rails 3开发环境之前,我们需要确保系统上已经安装了一些基本的软件包和工具。这一步骤对于后续的Ruby和Rails安装至关重要。 ##...
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中实现RESTful接口。 - **案例分析**: - 分析一个典型的RESTful应用示例。 #### 九、练习作业2-在Group里面发表文章-双层RESTFul - **目标**: - 在Group中添加Post功能。 - **实现过程**: - 创建...
这个Rails项目提供了学习和研究Web开发的机会,特别是对于Ruby on Rails新手,可以通过阅读和理解源代码来提升技能,了解实际应用中Rails的用法。同时,对于有经验的开发者,这个项目也可以作为一个起点,进行二次...