Ruby on rails YAML文件进行整数计算

Ruby on rails YAML文件进行整数计算,ruby-on-rails,yaml,Ruby On Rails,Yaml,我有一个YAML文件,格式如下 - make: toyota group: popular cn: FungTin en: Toyota id: 83 rank: 2 + %{random_number} - make: honda group: popular cn: boontin en: Honda id: 121 rank: 3 + %{random_number} 当我加载文件时 MAKE = YAML.load_file("#{Rails.r

我有一个YAML文件,格式如下

- make: toyota
  group: popular
  cn: FungTin
  en: Toyota
  id: 83
  rank: 2 + %{random_number}
- make: honda
  group: popular
  cn: boontin
  en: Honda
  id: 121
  rank: 3 + %{random_number}
当我加载文件时

MAKE = YAML.load_file("#{Rails.root}/config/data.yml")
我尝试通过以下方式进行操纵:

MAKE['rank'] % {random_number: rand(-1.0..1.0).round(3)}
这导致
没有将字符串隐式转换为整数的错误


如何实现这一点?

您的
MAKE
返回一个如下所示的
散列数组,因此您应该选择一个元素来执行操作

MAKE = YAML.load_file("#{Rails.root}/config/data.yml")

=> [{"make"=>"toyota", "group"=>"popular", "cn"=>"FungTin", "en"=>"Toyota", "id"=>83, "rank"=>"2 + %{random_number}"}]
试试这个

MAKE.first['rank'] % {random_number: rand(-1.0..1.0).round(3)}
=> "2 + -0.263"
要获取总和,请使用
eval

eval MAKE.first['rank'] % {random_number: rand(-1.0..1.0).round(3)}
=> 1.737

我们有两种方法可以做到这一点。
1.如果您只有一条记录,请使用下面的代码

此数据是散列数组,因此您可以从第一个索引获取数据,如下所示:

MAKE[0]['rank'] % {random_number: rand(-1.0..1.0).round(3)}
它将返回输出,如
“2+-0.046”

如果你想得到这些的总和,你可以这样做

eval MAKE[0]['rank'] % {random_number: rand(-1.0..1.0).round(3)}
它将返回输出
1.155

2.在另一种情况下,如果您的数据数组具有与您的情况相同的键,那么您必须定义
make
您必须根据该数组获得排名。
喜欢下面的代码。
我发现排名与本田相比,见以下代码

MAKE.select{|x| x['make']=='honda'}[0]['rank'] %{random_number: 5}

当它只是散列中的一项时,它就工作了,但如果它是数组列表呢?我已经更新了代码,现在您可以看到这两个步骤@杨健兴