Ruby on rails 在Rails单元测试中,如何让用户夹具加载其关联的概要文件?

Ruby on rails 在Rails单元测试中,如何让用户夹具加载其关联的概要文件?,ruby-on-rails,unit-testing,fixtures,Ruby On Rails,Unit Testing,Fixtures,在有关装置()的文档中,它们提供了以下使用标签引用进行关联的示例: ### in pirates.yml reginald: name: Reginald the Pirate monkey: george ### in monkeys.yml george: name: George the Monkey pirate: reginald 因此,按照他们的指导,我有一个用户模型,其中有一个:profile,一个属于:User的profile模型,并尝试按照他们的示例设置装置

在有关装置()的文档中,它们提供了以下使用标签引用进行关联的示例:

### in pirates.yml
reginald:
  name: Reginald the Pirate
  monkey: george

### in monkeys.yml
george:
  name: George the Monkey
  pirate: reginald
因此,按照他们的指导,我有一个用户模型,其中有一个:profile,一个属于:User的profile模型,并尝试按照他们的示例设置装置:

### in users.yml
reginald:
  id: 1
  login: reginald

### in profiles.yml
reginalds_profile:
  id: 1
  name: Reginald the Pirate
  user: reginald
(注意:由于我的关联是单向的,因此用户装置没有“profile:reginalds\u profile”关联——将其放入会导致错误,因为SQL表没有profile\u id属性。)


问题是,在我的单元测试中,似乎所有内容都正确加载,但是users(:reginald).profile总是为零。我遗漏了什么?

您可能必须声明正在加载所有这些装置,因为我不相信装置加载程序会自动遵循这样的关联。在某些情况下,您可能需要做的不仅仅是:

fixtures :all
实际声明每一项:

fixtures :users, :profiles

根据塔德曼的建议,我做了更多的搜索,并在这个网站的其他地方找到了答案,所以我不妨发布它

见标题为


显然,当您使用标签(user:reginald)而不是id(user_id:1)时,Rails查找关联装置的方式是对名称进行散列,并假设散列就是id。如果您将id设置为特定的内容,这将失败。但如果让Rails自动分配ID,它将使用该哈希方案。因此,fixture关联标签的文档缺少一个关键的小贴士——如果使用标签,则必须避免在要匹配的fixture中应用自己的ID。没有标签匹配的装置仍然可以使用您选择的任何ID方案。

我想我可能已经通过反复试验找到了答案。。。但我还是想看看是否有人能证实我做错了什么。我不喜欢尝试和错误解决方案。我注意到在我的示例中,主要的区别是我自己设置了装置的ID,而不是让Rails设置它们(旧习惯,从1.x开始使用Rails)。当我取出ID时,它工作了,但是为什么呢?我认为这是集成测试的情况,但是对于单元测试,它似乎加载了我所有的装置,只是没有进行关联。我试着让他们明白同样的问题。另一个需要注意的是手动分配ID值是否与自动分配、交叉引用功能冲突。感谢您在这里做的研究。我不确定,因为我尽量不混搭风格。