【问题标题】:Carrierwave Rails 3 S3, save the file size to the databaseCarrierwave Rails 3 S3,将文件大小保存到数据库
【发布时间】:2012-12-18 12:07:10
【问题描述】:

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

假设我有一个像这样显示的载波:

<%= @project.attachment %>

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

<%= @project.attachment.size %>

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

非常感谢

【问题讨论】:

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


    【解决方案1】:

    这对我有用

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 您好,我认为这行不通,我需要在从 db 获取记录时在 order 子句中使用“column”。也使用分页,所以这变成了虚拟属性的正确混乱。 ( @files = @project.attachments.where('private != ?', true).order(sort_column + " " + sort_direction).paginate(page: params[:page], per_page: 10) ) 我需要能够使用 'size' 作为 sort_column(参见 railscast #228)
      【解决方案3】:

      好的, 让它与 before_save 一起使用

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

      upload 是挂载的字段,size 是一个新的 db 列来存储大小。

      【讨论】:

        猜你喜欢
        • 2020-12-17
        • 2012-11-10
        • 1970-01-01
        • 2013-08-12
        • 2013-03-02
        • 2015-05-30
        • 2016-06-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多