Ruby on rails Rails 4 Unitwise Gem如何访问可能的单元类型列表?

Ruby on rails Rails 4 Unitwise Gem如何访问可能的单元类型列表?,ruby-on-rails,ruby,ruby-on-rails-3,ruby-on-rails-4,units-of-measurement,Ruby On Rails,Ruby,Ruby On Rails 3,Ruby On Rails 4,Units Of Measurement,我正在使用此gem向我的模型添加单位/金额。 我在这里学习了一个很棒的教程 我搞不懂的是如何访问可用单元的列表。创建新模型时,我希望我的用户能够选择他们想要保存金额的单位类型 以前有人需要这样做吗?这些单位似乎是在data/base\u unit.yaml和data/derived\u unit.yaml中定义的,它们分别具有Unitwise::Standard::BaseUnit和Unitwise::Standard::DerivedUnit类,用于从这些yaml文件中收集数据 使用这些类,您

我正在使用此gem向我的模型添加单位/金额。 我在这里学习了一个很棒的教程

我搞不懂的是如何访问可用单元的列表。创建新模型时,我希望我的用户能够选择他们想要保存金额的单位类型


以前有人需要这样做吗?

这些单位似乎是在data/base\u unit.yaml和data/derived\u unit.yaml中定义的,它们分别具有Unitwise::Standard::BaseUnit和Unitwise::Standard::DerivedUnit类,用于从这些yaml文件中收集数据

使用这些类,您可以执行以下操作:

Unitwise::Standard::BaseUnit.all.collect{|u| u.attributes['name']}

您可能还必须首先执行以下要求声明:

require 'unitwise'
require 'unitwise/standard'

Unitwise的设计使其支持无限多个单元。虽然完全不合理,但您可以创建类似Unitwise1的值,即焦耳.kilopascal/foot.year。我可能在这里过于技术化了,但是单位的数量不是有限的,所以我们不能全部列出。但是,您可以获得如下组件原子列表:

require 'unitwise'
Unitwise::Atom.all
# => [#<Unitwise::Atom names=["meter"], primary_code="m", secondary_code="M", symbol="m", scale=nil, classification=nil, property="length", metric=true, special=false, arbitrary=false, dim="L">, ...]
或者你也可以得到原子和前缀的所有可能组合,如下所示:

Unitwise::Compound.all
# => [#<Unitwise::Compound atom='m', prefix='', primary_code='m', secondary_code='M', symbol='m', names='["meter"]', slugs='["meter"]'>, ...]
最后,如果您正在搜索特定的内容,请使用以下命令:

Unitwise.search('degree')
# => [#<Unitwise::Compound atom='Cel', prefix='', primary_code='Cel', secondary_code='CEL', symbol='°C', names='["degree Celsius"]', slugs='["degree_celsius"]'>, ... ]

我来晚了,但也许这对将来的人有用

正如Josh所说的,谢谢你提供的很棒的库,顺便说一句,每个计量单位都由一个原子表示。这是一个原子样本:

[#<Unitwise::Atom names=["meter"], primary_code="m", secondary_code="M",symbol="m", scale=nil, classification=nil, property="length", metric=true, special=false, arbitrary=false, dim="L">, ...]
我最终还是得到了很多模糊的单位,所以我只是手动指定了我需要的单位,比如克、吨、磅和盎司:

Unitwise::Atom.all.select { |m| m.property == 'weight' }
                  .select { |m| m.classification != 'const' }
                  .select { |m| ['g','t','[lb_av]','[oz_av]'].include?(m.primary_code) }

巨大的免责声明:我是Rails上的新手,所以我相信这段代码可以得到极大的改进,但你明白了

您不能将数据从数据文件夹中的.yaml文件中提取到散列数组中吗?谢谢!我正在尝试设置一个表单,用户可以在其中选择单元类型,然后使用UnitWise保存它。你用过UnitWise吗?我没有找到很多关于如何执行的资源。对不起,你的帖子是我第一次听说Unitwise。不过它看起来很有趣,我很感谢你让我注意到它。我建议您克隆您自己的副本,然后将派生的_unit.yaml文件裁剪到您希望提供的单位。
Unitwise::Atom.all.select { |m| m.property == 'weight' }
                  .select { |m| m.classification != 'const' }
Unitwise::Atom.all.select { |m| m.property == 'weight' }
                  .select { |m| m.classification != 'const' }
                  .select { |m| ['g','t','[lb_av]','[oz_av]'].include?(m.primary_code) }