2012-06-19 34 views
3

我在rails应用程序中有一个产品模型,而在产品表中有一个类别列,用逗号分隔。我想创建一个连接表(product_categories),以便类别不再以逗号分隔(使计数更容易)。我正在计划通过产品表上的id进行连接,并且在连接表上有id,product_id和类别。如何在Rails中生成连接表

运行迁移以创建连接表还是生成模型然后运行迁移以创建连接表是最佳实践吗?

我正在运行rails 3.1.0。

回答

2

两种方法都可以工作;这基本上是the difference between has_many :through and has_and_belongs_to_many

如果您需要与连接本身交互作为模型(例如对其进行验证,添加其他元数据等),则应该为连接生成模型,并将关系定义为has_many:through。

但是,就您而言,您似乎不太可能需要添加有关给定产品类别连接的额外信息,因此,为连接表创建迁移并使用它们可能更有意义一个has_and_belongs_to_many关系。

+1

与has_many:through相比,HABTM关系的优势在于使用灯具。 HABTM关系允许您在产品夹具中指定产品所属的所有类别。但是如果你使用has_many:通过你必须在它自己的fixture文件中指定category和product之间的每个关系。 –