has_many:穿过rails 3.1中的灯具

时间:2011-09-28 19:58:11

标签: ruby-on-rails ruby-on-rails-3

我想设置一些has_many,:通过使用fixture来测试rails 3.1中的对象。

如果您查看关联的文档作为示例,我想知道如何将程序集分配给零件。我发现这样做的唯一方法是在它自己的文件中显式创建清单对象,但如果我对该模型的默认值感到满意,而我想要指定的是部件/汇编ID,那么就是直接做的方法吗?

http://guides.rubyonrails.org/association_basics.html#choosing-between-has_many-through-and-has_and_belongs_to_many

我想要类似的东西:

my_assembly:
    parts: my_first_part, my_second_part

如果您执行HABTM,则此方法有效,但如果您具有显式连接模型,则无效。

2 个答案:

答案 0 :(得分:8)

假设您想要或必须坚持使用灯具,那么如果您从HABTM切换到has_many:through关系,那么您将无法再使用短内联列表。您必须为:through模型创建单独的fixture文件。

答案 1 :(得分:-41)

永远不要将Rails灯具用于任何事情。

我会重复:永远不要使用Rails灯具。

它们很危险,很麻烦并且会使您的测试泄漏状态。它们不适合编写适当的测试。充其量,您将获得看起来好像已正确编写但具有隐藏依赖项的测试。 Rails团队100%错误地使用了这个功能,我希望他们能够将它从Rails中删除,这样人们就不会想要使用它了。

相反,安装factory_girl_rails并使用工厂按需创建测试记录:

Factory :assembly, :parts => [Factory(:part, :name => 'first'), Factory(:part, :name => 'second')]