has_many:穿过rails 3.1中的灯具

spi*_*ike 5 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
Run Code Online (Sandbox Code Playgroud)

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

rwc*_*c9u 8

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

  • 我有一个夹具users.yml,cities.yml和city_users.yml.如何告诉我的测试用户有许多城市使用这些灯具? (2认同)

Mar*_*ser -50

永远、永远不要将 Rails 固定装置用于任何用途。

我再说一遍:永远、永远不要使用 Rails 固定装置来做任何事。

它们很危险、很麻烦,并且会让你的测试泄漏状态。它们不适合编写正确的测试。最好的情况是,您得到的测试看起来像是正确编写的,但具有隐藏的依赖项。Rails 团队对这个功能的理解是 100% 错误的,我希望他们能从 Rails 中删除它,这样人们就不会被诱惑使用它。

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

Factory :assembly, :parts => [Factory(:part, :name => 'first'), Factory(:part, :name => 'second')]
Run Code Online (Sandbox Code Playgroud)

  • 我对“永远、永远不要使用 Rails 固定装置做任何事情”投了反对票。这是愚蠢的建议。我在一些项目中使用了固定装置,在其他项目中使用了工厂,这两种方法都有其优点和缺点。 (11认同)
  • 哈哈@不好的做法。请在某处发布博客文章来解释原因。您确实没有在原始答案中发布足够的(或任何真正的)证据来证明您的主张。Marnen,从这次讨论中我只能看出,要么我是一个比你更好的程序员(不太可能),要么你对固定装置的看法是错误的。 (2认同)