Ruby on rails YAML文件有一个语法错误,但它看起来与另一个正在工作的文件具有相同的格式?

Ruby on rails YAML文件有一个语法错误,但它看起来与另一个正在工作的文件具有相同的格式?,ruby-on-rails,yaml,Ruby On Rails,Yaml,我有两个类似格式的YAML文件,但是当我在rails应用程序上运行集成测试时,其中一个正在运行,另一个没有运行 以下是第一个无法工作的YAML文件: prince_edward_island: name: 'prince edward island' country: 'Canada' 新斯科舍省: 名称:“新斯科舍省” 国家:'加拿大' newfoundland: name: 'newfoundland' country: 'Canada' new_brunswick:

我有两个类似格式的YAML文件,但是当我在rails应用程序上运行集成测试时,其中一个正在运行,另一个没有运行

以下是第一个无法工作的YAML文件:

prince_edward_island:
  name: 'prince edward island'
  country: 'Canada'
新斯科舍省: 名称:“新斯科舍省” 国家:'加拿大'

newfoundland:
  name: 'newfoundland'
  country: 'Canada'

new_brunswick:
  name: 'new brunswick'
  country: 'Canada'

quebec:
  name: 'quebec'
  country: 'Canada'

manitoba:
  name: 'manitoba'
  country: 'Canada'

alberta:
  name: 'alberta'
  country: 'Canada'

ontario:
  name: 'ontario'
  country: 'Canada'

british_columbia: 'Canada'
  name: 'british columbia'
  country: 'Canada'

saskatchewan: 'Canada'
  name: 'saskatchewan'
  country: 'Canada'
下面是第二个YAML文件,它可以工作:

student_advisor_message:
  body: 'This is a message'
  subject: 'Subject!'
  user: student_advisor

manager_message:
  body: 'This is a message'
  subject: 'Subject!'
  user: manager

read_manager_message:
  body: 'This is a message'
  subject: 'Subject!'
  user: manager

agent_manager_message:
  body: 'This is a message'
  subject: 'Subject!'
  user: agent_manager

message_for_jack:
  body: 'This is a message'
  subject: 'Subject!'
  user: manager

message_for_jack_sent:
  body: 'This is a sent message'
  subject: 'Sent Subject!'
  user: manager

message_for_jack_trash:
  body: 'This is a trashed message'
  subject: 'Trash Subject!'
  user: manager
错误是:

ERROR:

while parsing a block mapping
  in "<unicode string>", line 1, column 1:
    prince_edward_island:
    ^
expected <block end>, but found '<block mapping start>'
  in "<unicode string>", line 34, column 3:
      name: 'british columbia'
错误:
在分析块映射时
在“”第1行第1列中:
爱德华王子岛:
^
应为,但找到“”
在“”第34行第3列中:
名称:不列颠哥伦比亚省

有人能解释一下我在这两者之间缺少的区别吗?对于这两种类型,我都使用空格,而不是制表符。

yaml文件中的父级不能有值

当您从这些行中删除(或注释)
Canada
时,它将正确解析

british_columbia: 'Canada'
  name: 'british columbia'
  country: 'Canada'

saskatchewan: #'Canada'
  name: 'saskatchewan'
  country: 'Canada'

有几个错误:

对于两者,我都使用制表符,而不是空格

制表符在YAML中不允许作为缩进字符

country: 'Canada'

  nova_scotia:
在这里,您给出了一个标量(
'Canada'
)和一个映射(从
新斯科舍省开始:
)作为键
国家的值。此键只能有一个值。您必须删除标量
'Canada'
,或者将其包含的映射移到其他位置

british_columbia: 'Canada'
  name: 'british columbia'
  country: 'Canada'

saskatchewan: 'Canada'
  name: 'saskatchewan'
  country: 'Canada'

在这里,您又犯了两次相同的错误。

您能详细说明您所犯的错误吗?首先,我指的是空格,而不是制表符**,我道歉。第二,我的代码的后半部分被意外地重新标记。至于第三点,我相信这就是错误所在,谢谢。Amit也有正确的答案,但由于这对于未经编辑的问题更为彻底,我将接受这个问题。