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

的前面就解决问题了。

真是诡异。

你可能感兴趣的:(Ruby,Rails,ActiveRecord)