我现在开始在Rails上,我在论坛上看了一下,但是我没有找到任何可以解决我的问题的东西。在Rails上创建表时需要创建一个外键?
在这里,我有一个分类表,它只有一个列的名称(没有重复类别),所以我想要名称为主键,然后我有一个产品表具有名称,main_photo,描述,我想说,一个产品只有一个类别,我是否需要添加一个名为category的列作为产品的外键?
类别被认为有许多产品。
然后在类别模型中,我该如何说名称是主键,以及如何才能在产品中的类别和类别之间建立主键名称之间的对应关系?
我现在开始在Rails上,我在论坛上看了一下,但是我没有找到任何可以解决我的问题的东西。在Rails上创建表时需要创建一个外键?
在这里,我有一个分类表,它只有一个列的名称(没有重复类别),所以我想要名称为主键,然后我有一个产品表具有名称,main_photo,描述,我想说,一个产品只有一个类别,我是否需要添加一个名为category的列作为产品的外键?
类别被认为有许多产品。
然后在类别模型中,我该如何说名称是主键,以及如何才能在产品中的类别和类别之间建立主键名称之间的对应关系?
活动记录中的外键约束并不经常使用,因为活动记录背后的意识形态认为这种逻辑应该属于模型而不属于数据库 - 数据库只是一个哑存储:http://guides.rubyonrails.org/migrations.html#active-record-and-referential-integrity。
Rails的方式是在包括您的Categories表在内的所有表上都有一个ID列,并且在Products表中有一个名为Category_ID的列。注意表名是复数。
然后在您的模型中定义实体产品和类别之间的关系。阅读文章A Guide to Active Record Associations,它会回答你所有的问题,特别是第2.1,2.2和3.3节。
有很多有效的理由在你的数据库中有外键。请参阅Does Rails need database-level constraints?
如果您想轻松地将外键添加到您的Rails应用程序,我建议您使用Foreigner。
但是当我做铁轨生成脚手架类别名称:字符串,不是它默认创建一个ID列?我的表格会有一个ID和一个名称列.. –
是的,它应该为每个表添加一个ID列。但它不会将Category_ID列添加到Products表中,您必须手动执行此操作。 – link664
通过我在我的回答中发布的链接,您的问题的所有答案都在那里。 – link664