Sì, questo è possibile. Puoi utilizzare papreclip per gestire i caricamenti di file (o qualsiasi altro plugin/gemma di gestione del caricamento affidabile). La maggior parte di questi strumenti ti dà accesso alla dimensione del file caricato. Puoi semplicemente archiviare questi file nel database insieme a asset_uri (che immagino tu stia già archiviando), e per verificare se un utente può caricare un altro file, sommi semplicemente tutte le dimensioni di tutte le risorse con id_utente appropriato.
Users:
id
email_address
first_name
upload_limit
Assets:
id
user_id
uri
filesize
filename
Poi, per afferrare la dimensione totale dei file caricati da un particolare utente, si potrebbe fare:
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
Si può vedere che sto facendo uso della funzione ActiveRecord sum qui per fare il calcolo . Si potrebbe facilmente usare una mappa o qualche altra soluzione basata su rubino.
fonte
2010-03-07 20:21:40