在Rails上创建表时需要创建外键吗?

时间:2011-11-30 23:36:24

标签: ruby-on-rails foreign-key-relationship scaffold

我现在开始使用Rails,我在论坛中查看,但我找不到任何可以解决我问题的内容。

在这里,我有一个Category表,它只有一个列的名称(类别中没有重复)所以我想将名称作为主键,然后我有一个名称的Product表, main_photo,描述和我想说一个产品只有一个类别,我是否需要在产品中添加一个名为category的列作为外键?

一个类别被认为有很多产品。

然后在类别模型中,我怎么说名称是主键,如何在产品类别和类别中使用主键名称之间的对应关系?

2 个答案:

答案 0 :(得分:15)

Active Record中的外键约束并不经常使用,因为Active Record背后的意识形态认为这种逻辑应属于模型而不属于数据库 - 数据库只是一个愚蠢的存储:{{3} }。

Rails的方法是在所有表上都有一个ID列,包括Categories表,在Products表中,有一个名为Category_ID的列。请注意,表名是复数。

然后在您的模型中定义实体Product和Category之间的关系。阅读文章http://guides.rubyonrails.org/migrations.html#active-record-and-referential-integrity,它将回答您的所有问题,尤其是第2.1,2.2和3.3节。

答案 1 :(得分:6)

在数据库中使用外键有许多正当理由。见Does Rails need database-level constraints?

如果您想轻松地将外键添加到Rails应用程序,我建议Foreigner