脚手架时创建关系

时间:2012-11-18 22:38:24

标签: ruby-on-rails ruby scaffolding

您好我是Ruby on Rails的新手。我正在尝试创建一个小型博客网站。我有两张桌子帖子和评论。每篇博文都会有很多评论。我使用这些命令生成表。

rails g scaffold Post title:string body:text author:string
rails g scaffold Comment body:string author:string

现在我想将关系添加到模型类中。我将has_many :comments添加到Post类,将belongs_to :title添加到Comment类。但是,当我尝试调用post.comments时,我收到运行时错误SQLException: no such column: comments.post_id。我应该创建一个迁移并在Comment下添加post_id,还是有办法在scaffolding中实现这个目的?

3 个答案:

答案 0 :(得分:134)

Scaffold实际上提供了一种生成关系的方法,您应该使用:references数据类型

rails g scaffold Comment body:string author:string post:references

这将为comments表生成一个迁移,其中包含post_id字段和索引。生成器还会将belongs_to :post添加到Comment模型中。

然而,它不会产生关系的反面,因此您需要添加

has_many :comments

自己去Post模型。如果这是您需要的,则还需要添加嵌套资源路由,因为生成器无法处理此问题。

答案 1 :(得分:9)

你肯定是在正确的轨道上。如果您在生成post_id脚手架时添加Comment列,那么您的关系将有效(尽管您仍需要添加has_many :commentsbelongs_to :post

因此更新的生成器调用将如下所示:

rails g scaffold Comment body:string author:string post_id:integer

答案 2 :(得分:0)

您也可以像这样使用belongs_to

rails g scaffold Comment body:string author:string post:belongs_to