Carrierwave Rails 3 S3,将文件大小保存到数据库中

时间:2012-08-02 20:17:08

标签: ruby-on-rails amazon-s3 carrierwave

使用Carrierwave和Rails 3.2.6。一切都很好,除了我需要对表格进行排序,其中一些附件按文件大小显示。我正在使用S3进行雾化存储。

假设我的Carrierwave显示如下:

<%= @project.attachment %>

我可以在字段名称后面使用'.size'来显示文件的大小:

<%= @project.attachment.size %>

显示文件大小(以字节为单位),但由于我需要在从数据库获取记录时使用order子句,因此我无法对此进行排序。 有没有办法在文件大小上传后将文件大小写入数据库中的特定列,这样我可以对此进行排序?

非常感谢

3 个答案:

答案 0 :(得分:2)

这对我有用

 before_save :update_project_attributes

 private

 def update_project_attributes
    if project.present? && project_changed?
      self.file_size = project.file.size
    end
 end

答案 1 :(得分:0)

您应该向模型添加虚拟属性,并定义返回文件大小的自定义getter方法。然后,您可以像往常一样对此虚拟属性进行排序。如果您需要更多详细信息,请告诉我,我会尽力提供!

答案 2 :(得分:0)

确定, 得到这个用于before_save

before_save :set_size

def set_size
  self.size = self.upload.size
end

其中upload是装载字段,size是用于存储大小的新db列。