Create relationships when scaffolding

Stefan Bossbaly picture Stefan Bossbaly · Nov 18, 2012 · Viewed 23.5k times · Source

Hi I am new to Ruby on Rails. I am trying to create a small blog site. I have two tables Posts and Comments. Each Post will have many comments. I generate the tables using these commands.

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

Now I want to add the relationship to the model classes. I add has_many :comments to the Post class and belongs_to :post to the Comment class. However when I try to call post.comments I get a runtime error saying SQLException: no such column: comments.post_id. Should I create a migration and add post_id under Comment or is there a way to achieve this when scaffolding?

Answer

JamieD picture JamieD · Oct 3, 2014

Scaffold actually provides a way to generate relationships, you should use the :references data type

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

This will generate a migration for the comments table with a post_id field and index for it. The generator will also add belongs_to :post to the Comment model.

It will not however generate the reverse side of the relationship so you'll need to add

has_many :comments

to the Post model yourself. You will also need to add nested resource routing if this is something you need as the generator can not handle this.