2

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

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

<%= @project.attachment %>

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

<%= @project.attachment.size %>

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

非常感谢

4

3 回答 3

2

这对我有用

 before_save :update_project_attributes

 private

 def update_project_attributes
    if project.present? && project_changed?
      self.file_size = project.file.size
    end
 end
于 2012-12-18T04:07:10.607 回答
0

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

于 2012-08-02T21:51:10.497 回答
0

好的,让它与 before_save 一起使用

before_save :set_size

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

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

于 2012-08-03T08:35:28.767 回答