我想在 Ruby on Rails 应用程序中实现度量单位首选项。
例如,用户应该能够在以英里或公里显示距离之间进行选择。而且,显然,不仅显示,还输入值。
我想所有值都应该存储在一个全局测量系统中以简化计算。
有什么解决方案吗?还是我应该自己写?
我想在 Ruby on Rails 应用程序中实现度量单位首选项。
例如,用户应该能够在以英里或公里显示距离之间进行选择。而且,显然,不仅显示,还输入值。
我想所有值都应该存储在一个全局测量系统中以简化计算。
有什么解决方案吗?还是我应该自己写?
红宝石宝石“ruby-units”可能会有所帮助:
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
您也许可以看看这个 gem,它可以让您执行一些单位转换。
Github 上的数量
我构建了 Unitwise来解决 Ruby 中的大多数单位转换和测量数学问题。
简单的用法如下所示:
require 'unitwise/ext'
26.2.mile.convert_to('km')
# => #<Unitwise::Measurement 42.164897129794255 kilometer>
如果您想在 Rails 模型中存储测量值,可以执行以下操作:
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>
在 GitHub 上快速搜索发现了这个:http: //github.com/collectiveidea/measurement
听起来它可以满足您的需求(就单位之间的转换而言),但我不能说我自己使用过它。
编辑:皮埃尔的宝石看起来更加坚固和活跃。