Ruby on rails Carrierwave Rails 3 S3,将文件大小保存到数据库
使用带轨道的Carrierwave 3.2.6。一切正常,只是我需要对一个表进行排序,其中一些附件是按文件大小显示的。我使用S3存储雾 比如说,我有一个Carrierwave节目,像这样: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子句,因此无法在此基础上排序。 上传后
<%= @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)