Ruby on rails NoMethodError:未定义的方法'each#u value';解析YAML数组时
我有一个简单的YAML数组,其值如下Ruby on rails NoMethodError:未定义的方法'each#u value';解析YAML数组时,ruby-on-rails,ruby,yaml,Ruby On Rails,Ruby,Yaml,我有一个简单的YAML数组,其值如下 %YAML 1.1 --- - - 'd7744c3878' - '80705686' - - 'c349b086b1' - '80705686' - - '516e25d139' - '95203563' 我尝试使用以下代码对它们进行迭代,并将它们添加到数据库中 YAML.load_file("db/tokens.yml").each_value do |yml_token| token = Token.find_or
%YAML 1.1
---
-
- 'd7744c3878'
- '80705686'
-
- 'c349b086b1'
- '80705686'
-
- '516e25d139'
- '95203563'
我尝试使用以下代码对它们进行迭代,并将它们添加到数据库中
YAML.load_file("db/tokens.yml").each_value do |yml_token|
token = Token.find_or_create_by_token_origin(
token_origin: yml_token[0],
token_value: yml_token[1])
end
但是我得到了一个NoMethodError:undefined方法,每个_值#
尝试运行代码时出错
你知道这是什么原因吗
更新:
使用下面建议的Psych.load
,我还得到了一个SyntaxError:db/gallery\u令牌。yml:1:未知类型的%string
%YAML 1.1
错误
require "psych"
Psych.load("db/tokens.yml").each do |yml_token|
token = Token.find_or_create_by_token_origin(
token_origin: yml_token[0],
token_value: yml_token[1])
end
顶部的声明“%YAML 1.1”可能会导致问题 无错误:
require "yaml"
YAML.load("---\n\n-\n - 'd7744c3878'\n - '80705686'").each
=> #<Enumerator: [["d7744c3878", "80705686"]]:each>
直接使用Psych的可能替代方法是切换到更高版本的Ruby或从文件中删除
%YAML 1.1
头。如果检查YAML.load\u文件(“db/tokens.yml”)
,会得到什么?我得到整个数组YAML数组。数组的每个值都不存在,这用于Hash
es.@oldergod我应该用什么来代替呢?如果要解析硬盘上的文件,需要调用Psych.load\u file
。所以,我应该用什么来代替呢?@Martin:看起来有几个选项--请看我的编辑。使用psych时,我出现了这个错误SyntaxError:db/tokens.yml:1:未知类型的%string%YAML 1.1^
@Martin:您使用的是什么版本的psych和Ruby?让我们看看
YAML.load("%YAML 1.1\n---\n\n-\n - 'd7744c3878'\n - '80705686'").each
NoMethodError: undefined method `each' for "%YAML 1.1 ---\n- - 'd7744c3878' - '80705686'":String
from (irb):4
from /Users/modify/.rvm/rubies/ruby-1.9.2-p180/bin/irb:17:in `<main>'
require "psych"
Psych.load("%YAML 1.1\n---\n\n-\n - 'd7744c3878'\n - '80705686'").each
=> #<Enumerator: [["d7744c3878", "80705686"]]:each>