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