2017-02-16 27 views
0

我有一个名为product_categories的表。我想创造一种自我关系。使用迁移生成命令的正确方法是什么?我这样做,并没有工作: 轨摹迁移AddProductCategoryToProductCategories产品分类:引用生成一个用于添加外键(表名为2个字)的迁移

+0

你将不得不使用下划线'product_category'或类似的 – Iceman

+1

塔尔一些工作。谢谢! – churros

+0

通过这个阅读,对迁移http://edgeguides.rubyonrails.org/active_record_migrations.html – Iceman

回答

-1

一般而言,表名可以是任何你希望它是什么。我有时会发现Rails的命名约定有点怪异。

如果你已经产生的product_categories和产品型号/表,然后就去做:

rails generate model product_categories_products product_id:integer product_category_id:integer 

这将产生存储外国键和充当代理表的模式。

然后,您将需要建立产品型号有:

has_many product_categories_products 
has_many product_categories, through: product_categories_products 

然后定义在产品分类

以下
has_many product_categories_products 
has_many products, through: product_categories_products 

终于在ProductCategoryProduct

belongs_to product 
belongs_to product_category 

然而,上述命名约定是可怕的。你最好将ProductCategory重命名为'Category',然后你的代理表模型可以是'ProductCategory'。

...或者你可以重新命名一些完全不同的东西,然后在关联定义中手动指定class_name。

+0

谢谢@JayJay。问题是我的数据库中有两个类别表。所以我真的不知道如何命名这两个,并且同时尊重rails的命名习惯。 – churros