StatementInvalid error when adding a tagging system to a blog

Hi there, I’m very new to RoR please be kind.

I wasn’t sure where to go but I was hoping I could find help here after days of hair pulling. Stackoverflow was not successful.

I have followed the Official Beginners Guide to ROR and made a blog.

I wanted to take it further and add a tagging system to the blog. Im getting errors and I don’t have enough knowledge of ruby to determine what is causing them. Any thoughts/help would be really appreciated.

So this is the error

ActiveRecord::StatementInvalid in Posts#show Showing /home/nadia/blog/app/views/posts/show.html.erb where line #8 raised:

SQLite3::SQLException: no such column: taggings.post_id: SELECT “tags”.* FROM “tags” INNER JOIN “taggings” ON “tags”.“id” = “taggings”.“tag_id” WHERE “taggings”.“post_id” = ? Extracted source (around line #8):

6

7Tags:

8<% @post.tags.each do |tag| %>

9<%= link_to tag.name, tag_path(tag) %>

10<% end %>

11

And this a small chunk of the

post_controller:

def new
 27       @post = Post.new
 28    end
 29    def create
30       @post = Post.new(post_params)
 31
 32         if @post. save
33             redirect_to action: :show, id: @post. id
34          else
 35             render 'new'
 36          end
 37    end
 38
 39    def destroy
40        @post = Post.find(params[:id])
 41        @post. destroy
42
 43     redirect_to action: : index
44     end

This is my tag_controller


  1 class TagsController < ApplicationController
  2
  3     def show
4       @tag = Tag.find(params[:id])
  5 end

It says there is no column post_id in the table taggings. Is it that you do not think it should be looking for that column or is it that you know there should be but think that it does exist?

You have neglected to show us taggings.rb but I presume it contains belongs_to post.

Colin

Oh yes sorry

This is my Taggings.rb

1 class Tagging < ActiveRecord::Base

2 belongs_to :tag

3 belongs_to :posts

4 end

It is belongs_to :post ----------- not posts

Hi, thank you for that. I have made that change. From

belongs_to :tag

belongs_to :posts

to

belongs_to :tag

belongs_to :post

However. I am still getting the same error.

Looking at many similar open stackoverflow answers and questions I honestly thought the pluralization was going to fit it. But unfortunately it still hasn’t.

Hi, thank you for that. I have made that change. From

belongs_to :tag belongs_to :posts

to

belongs_to :tag belongs_to :post

However. I am still getting the same error. Looking at many similar open stackoverflow answers and questions I honestly thought the pluralization was going to fit it. But unfortunately it still hasn't.

Are you still getting the error saying that there is no column post_id in the table taggings? I askied this in my first reply and you did not answer. If it is still saying that have you checked that there is such a column?

Colin

Yep. All fixed now. I checked for the columns like you asked. And I found out that the typo/pluralization in the Taggings.rb file named the column wrong

ie:

belongs_to :posts

made the column name posts_id as opposed to post_id

after fixing the typo, I rolled back the migration, and ran the migration again to change the name of the table.

AND NOW IT WORKS!

Thank you so much everyone! I really appreciate all the help!

Error messages can be very confusing and it is easy to miss the one that is important in a batch of other messages. It is always worth looking carefully through the errors in the hope of finding one that is useful, in this case the one saying that the column was missing.

Colin