7

Me gustaría implementar las preferencias de la unidad de medida en la aplicación Ruby on Rails.¿Hay alguna solución para traducir unidades de medida en los rieles?

Por ejemplo, el usuario debe poder seleccionar entre mostrar las distancias en millas o en kilómetros. Y, obviamente, no solo mostrar, sino también ingresar valores.

Supongo que todos los valores se deben almacenar en un sistema de medición global para simplificar los cálculos.

¿Hay alguna solución para esto? ¿O debería escribir el mío?

+0

pregunta relacionada: http://stackoverflow.com/questions/1933690/using-rails-actionview-helpers-outside-of-rails –

Respuesta

11

La gema de rubíes "rubí-unidades" pueden ayudar:

http://ruby-units.rubyforge.org/ruby-units/

require 'rubygems' 
require 'ruby-units' 

'8.4 mi'.to('km')  # => 13.3576 km 
'8 lb 8 oz'.to('kg') # => 3.85554 kg 

a = '3 in'.to_unit 
b = Unit('5 cm') 
a + b     # => 4.968 in 
(a + b).to('cm')  # => 16.62 cm 
+0

¿Está desactivado el sitio? – Bruno

+1

Esta biblioteca se ha mudado a github: https://github.com/olbrich/ruby-units –

0

Búsqueda rápida en GitHub apareció esto: http://github.com/collectiveidea/measurement

Suena como lo hace lo que necesita (por lo que la conversión entre unidades), pero no puedo decir que he utilizado yo mismo.

Editar: La gema de Pierre parece que es más robusta y activa.

3

Tal vez pueda echar un vistazo a esta joya, que le permite realizar algunas conversiones de unidades.

Quantity en Github

1

que construyeron Unitwise para resolver la mayoría de problemas de conversión de unidades de medida y matemáticas en Ruby.

Uso simple es el siguiente:

require 'unitwise/ext' 

26.2.mile.convert_to('km') 
# => #<Unitwise::Measurement 42.164897129794255 kilometer> 

Si desea almacenar mediciones en sus modelos de rieles, se podría hacer algo como esto:

class Race < ActiveRecord::Base 
    # Convert value to kilometer and store the number 
    def distance=(value) 
    super(value.convert_to("kilometer").to_f) 
    end 

    # Convert the database value to kilometer measurement when retrieved 
    def distance 
    super.convert_to('kilometer') 
    end 
end 

# Then you could do 
five_k = Race.new(distance: 5) 
five_k.distance 
# => #<Unitwise::Measurement 5 kilometer> 

marathon = Race.new(distance: 26.2.mile) 
marathon.distance.convert_to('foot') 
# => #<Unitwise::Measurement 138336.27667255333 foot> 
Cuestiones relacionadas