生成用于添加外键的迁移(具有2个字的表名)

时间:2017-02-16 19:06:56

标签: ruby-on-rails

我有一个名为product_categories的表。我想创造一种自我关系。使用迁移生成命令的正确方法是什么?我做了这个,它没有工作: rails g migration AddProductCategoryToProductCategories productcategory:references

2 个答案:

答案 0 :(得分:-1)

一般来说,表名可以是您想要的任何名称。我有时会发现Rails的命名约定有点令人讨厌。

如果您已经生成了product_categories和products models / tables,那么就这样做:

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

然后在ProductCategory中定义以下内容

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。

答案 1 :(得分:-1)

总结一下评论部分的作用。 你必须使用

product_category

而不是

productcategory

Rails使用_作为名称之间的分隔符,称为snake case。在开始使用Rails时,这一切都有点令人困惑,甚至在使用Rails很长一段时间后也是如此。指南是你的朋友......

http://edgeguides.rubyonrails.org/active_record_migrations.html http://edgeguides.rubyonrails.org/association_basics.html