2008-12-08 3 views
14

Je dois formater une représentation entière d'octets en quelque chose d'amical, et j'espère qu'il y a une fonction d'utilité dans Ruby ou dans Rails qui fera ce formatage pour moi (pour perpétuer ma paresse, de bien sûr)Format d'octets amicaux dans les rails

Je cherche quelque chose qui ressemblerait à:.

format_bytes(1024)  -> "1 KB" 
format_bytes(1048576) -> "1 MB" 

on dirait qu'il ya des choses dans ActiveSupport de le faire dans l'autre sens, mais je n'ai pas trouvé un moyen de faire dans cette direction.

S'il n'y en a pas, existe-t-il une solution particulièrement élégante?

Répondre

37

Number to human size est ce que vous cherchez.

require 'action_view' 
include ActionView::Helpers::NumberHelper 
number_to_human_size(123)           # => 123 Bytes 
number_to_human_size(1234)           # => 1.2 KB 
number_to_human_size(12345)          # => 12.1 KB 
number_to_human_size(1234567)          # => 1.2 MB 
number_to_human_size(1234567890)         # => 1.1 GB 
number_to_human_size(1234567890123)        # => 1.1 TB 
number_to_human_size(1234567, :precision => 2)      # => 1.18 MB 
number_to_human_size(483989, :precision => 0)      # => 473 KB 
number_to_human_size(1234567, :precision => 2, :separator => ',') # => 1,18 MB 
+2

Merci! Je cherchais cette solution exacte. – CalebHC

+0

la valeur maximale est number_to_human_size (999999999999999) # => "909 TB" – adcosta

1

La réponse acceptée fonctionne toujours, mais nécessite actionpack au lieu de actionview dans les rails plus récents.

require 'actionpack' 
1

Réponse acceptée c'est parfait, mais je n'avais pas besoin des deux premières lignes. Je ne mets:

number_to_human_size(123)           # => 123 Bytes 
number_to_human_size(1234)           # => 1.2 KB 
number_to_human_size(12345)          # => 12.1 KB 
number_to_human_size(1234567)          # => 1.2 MB 
number_to_human_size(1234567890)         # => 1.1 GB 
number_to_human_size(1234567890123)        # => 1.1 TB 
number_to_human_size(1234567, :precision => 2)      # => 1.18 MB 
number_to_human_size(483989, :precision => 0)      # => 473 KB 
number_to_human_size(1234567, :precision => 2, :separator => ',') # => 1,18 MB 

et fonctionne comme un charme.