Rails固定装置--如何设置外键?

33

我正在阅读这篇指南(感谢trevorturk),它介绍了Rails中的测试数据。你可以在一个Yaml文件中定义类,然后它们会被自动加载到test数据库中,非常酷。

但是,如果你想指定这个食谱属于哪本菜谱(或其他什么东西),该怎么办呢?

你是否应该在Yaml代码中手动指定cookbook.idrecipe.cookbook_id的值?(只是猜测--指南中没有显示任何这样的内容。)还是有更合适的方法?

2个回答

69

您应该使用命名的夹具(named fixtures),这些夹具会在您未提供id号码时自动生成一个。这些id号码本质上是您使用的任何字符串的整数哈希值。如果引用了命名版本,请不要添加"_id"。

# recipes.yml
chicken_soup:
  cookbook: my_recipes

# cookbooks.yml
my_recipes:
  title: My Test Cookbook

哇,这比我想象的简单多了 :) 我之前尝试了一些愚蠢的东西,比如 client_id: <%= contacts(:dave).id %>(显然是行不通的)。 - Skilldrick
4
如果您有一个与对象命名不同的ID(例如my_cookbook_id),您可以这样指定对象的类:my_cookbook: my_recipes (Cookbook) - Fred Willmore

6
此外,如果您想要进行多对多关联(HABTM),您只需在测试数据中为该关联提供一个数组即可:
# recipes.yml
chicken_soup:
  cookbooks: [my_recipes, another_recipe]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接