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?
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.
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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With