【问题标题】:Are there any solutions for translating measurement units on Rails?在 Rails 上转换测量单位有什么解决方案吗?
【发布时间】:2011-03-01 20:17:30
【问题描述】:

我想在 Ruby on Rails 应用程序中实现度量单位首选项。

例如,用户应该能够在以英里或公里显示距离之间进行选择。而且,显然,不仅显示,还输入值。

我想所有值都应该存储在一个全局测量系统中以简化计算。

是否有任何解决方案?还是我应该自己写?

【问题讨论】:

标签: ruby-on-rails ruby internationalization units-of-measurement localization


【解决方案1】:

红宝石“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

【讨论】:

    【解决方案2】:

    您也许可以看看这个 gem,它可以让您执行一些单位转换。

    Quantity 在 Github 上

    【讨论】:

      【解决方案3】:

      我构建了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>
      

      【讨论】:

        【解决方案4】:

        在 GitHub 上快速搜索发现:http://github.com/collectiveidea/measurement

        听起来它可以满足您的需求(就单位之间的转换而言),但我不能说我自己使用过。

        编辑:皮埃尔的宝石看起来更健壮和活跃。

        【讨论】:

          猜你喜欢
          • 2014-11-14
          • 2011-08-15
          • 2021-12-01
          • 2016-03-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-12-17
          • 1970-01-01
          相关资源
          最近更新 更多