是的,这是可能的。您可以使用papreclip来管理文件上传(或任何其他可信的上传管理插件/宝石)。大多数这些工具可让您访问上传文件的文件大小。您可以将这些文件与asset_uri一起存储在数据库中(我想您已经存储了这些文件),并检查用户是否可以上传另一个文件,只需将所有资产的所有大小与相应的user_id进行总和即可。
Users:
id
email_address
first_name
upload_limit
Assets:
id
user_id
uri
filesize
filename
然后,由特定用户抢上载文件的总大小,你可以这样做:
class User < ActiveRecord::Base
has_many :assets
#Check if the user can upload another file
def can_upload?
if Asset.sum('filesize', :conditions => 'user_id = #{self.id}') >= self.upload_limit
return false
else
return true
end
end
#See the user's used storage space
def used_storage
return Asset.sum('filesize', :conditions => 'user_id = #{self.id}')
end
#See how much space the user has remaining
def available_storage
if self.can_upload?
return self.upload_limit - Asset.sum('filesize', :conditions => 'user_id = #{self.id}')
else
return 0
end
end
end
你可以看到我正在使用ActiveRecord sum功能,在这里做计算。您可以轻松使用地图或其他基于ruby的解决方案。