在有关Fixtures(http://api.rubyonrails.org/classes/Fixtures.html)的文档中,他们提供了以下使用关联标签引用的示例:
### in pirates.yml
reginald:
name: Reginald the Pirate
monkey: george
### in monkeys.yml
george:
name: George the Monkey
pirate: reginald
因此,在他们的领导下,我有一个用户模型has_one:个人资料,个人资料:belongs_to:用户,并试图根据他们的例子设置灯具:
### in users.yml
reginald:
id: 1
login: reginald
### in profiles.yml
reginalds_profile:
id: 1
name: Reginald the Pirate
user: reginald
(注意:由于我的关联是单向的,因此用户夹具没有“profile:reginalds_profile”关联 - 因为SQL表没有profile_id属性,所以它会导致错误。)
问题是,在我的单元测试中,一切似乎都正确加载,但用户(:reginald).profile总是为零。我错过了什么?
答案 0 :(得分:19)
根据tadman的建议,我做了一些搜索,并在本网站的其他地方找到了答案,所以我不妨发布它。
请参阅标题为 Automatic associations in ruby on rails fixtures
的帖子显然,当您使用标签(用户:reginald)而不是ID(user_id:1)时,Rails找到关联装置的方式是通过对名称进行散列并假设散列是ID。如果将ID设置为特定的ID,则会失败。但是,如果您让Rails自动分配ID,则使用该散列方案。因此,夹具关联标签的文档缺少关键信息 - 如果您使用标签,则必须避免在要匹配的夹具中应用您自己的ID。未与标签匹配的灯具仍可以使用您选择的任何ID方案。
答案 1 :(得分:3)
您可能必须声明您正在加载所有这些灯具,因为我不相信灯具加载器会自动遵循这样的关联。在某些情况下,您可能需要做的不仅仅是:
fixtures :all
实际上宣布每一个:
fixtures :users, :profiles