Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Carrierwave Rails 3 S3,将文件大小保存到数据库_Ruby On Rails_Amazon S3_Carrierwave - Fatal编程技术网

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

Ruby on rails Carrierwave Rails 3 S3,将文件大小保存到数据库,ruby-on-rails,amazon-s3,carrierwave,Ruby On Rails,Amazon S3,Carrierwave,使用带轨道的Carrierwave 3.2.6。一切正常,只是我需要对一个表进行排序,其中一些附件是按文件大小显示的。我使用S3存储雾 比如说,我有一个Carrierwave节目,像这样: <%= @project.attachment %> 我可以在字段名后使用“.size”显示文件大小: <%= @project.attachment.size %> 以字节为单位显示文件大小,但由于从数据库获取记录时需要使用order子句,因此无法在此基础上排序。 上传后

使用带轨道的Carrierwave 3.2.6。一切正常,只是我需要对一个表进行排序,其中一些附件是按文件大小显示的。我使用S3存储雾

比如说,我有一个Carrierwave节目,像这样:

<%= @project.attachment %>

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

<%= @project.attachment.size %>

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


非常感谢

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

好的, 在保存之前要处理这个吗

before_save :set_size

def set_size
  self.size = self.upload.size
end
其中upload是挂载字段,size是一个新的db列来存储大小。

这对我来说很有用

 before_save :update_project_attributes

 private

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

嗨,我不认为这样行,我需要在order子句中使用'column'从db获取记录。还使用分页,因此虚拟属性会变得一团糟。(@files=@project.attachments.where('private!=?',true).order(sort_column+“”+sort_direction).分页(page:params[:page],per_page:10))我需要能够将'size'用作sort_column(参见railscast 228)