9

在有关 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

因此,在他们的带领下,我有一个拥有_one :profile 的用户模型,一个属于_to :user 的配置文件模型,并尝试根据他们的示例设置固定装置:

### 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 属性。)

问题是,在我的单元测试中,一切似乎都正确加载,但 users(:reginald).profile 始终为零。我错过了什么?

4

2 回答 2

22

根据 tadman 的建议,我进行了更多搜索,并在本网站的其他地方找到了答案,所以我不妨将其发布。

请参阅标题为ruby​​ on rails fixtures 中的自动关联的帖子

显然,当您使用标签 (user: reginald) 而不是 ID (user_id: 1) 时,Rails 查找关联固定装置的方式是通过散列名称并假设散列是 ID。如果您将 ID 设置为特定的值,则会失败。但是,如果您让 Rails 自动分配 ID,它会使用该散列方案。因此,夹具关联标签的文档缺少一个关键花絮——如果您使用标签,则必须避免在要匹配的夹具中应用您自己的 ID。标签不匹配的灯具仍然可以具有您选择的任何 ID 方案。

于 2010-03-26T00:49:10.877 回答
3

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

fixtures :all

实际上声明它们中的每一个:

fixtures :users, :profiles
于 2010-03-25T19:56:35.063 回答