Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Create relationships when scaffolding

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?

like image 418
Stefan Bossbaly Avatar asked Nov 18 '12 22:11

Stefan Bossbaly


People also ask

What is scaffolding in a relationship?

In relationships, scaffolding are the small activities we do which contribute to building a super-strong structure on which the relationship is supported, or scaffolded.

What is data scaffolding?

Data scaffolding is a technique used to fill in pieces of data that are missing from your data source in order to help with analysis and visualization.


1 Answers

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.

like image 183
JamieD Avatar answered Oct 05 '22 10:10

JamieD