Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

remove_column not removing column or giving any errors in rails

I have a sqlite3 db in a rails app with the following schema

ActiveRecord::Schema.define(:version => 20100816231714) do

  create_table "comments", :force => true do |t|
    t.string   "commenter"
    t.text     "body"
    t.integer  "post_id"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

  create_table "posts", :force => true do |t|
    t.string   "name"
    t.string   "title"
    t.text     "content"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

  create_table "tags", :force => true do |t|
    t.string   "name"
    t.integer  "post_id"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

end

I began with a Post :has_many relationship with tags so each tag has a post_id reference.

I now want to change this relationship to a 'has_and_belongs_to_many', I know i have to create the joins table etc.... this isn't a problem and is working

The problem comes in when i try remove the post_id form the tags table. My migration looks like this:

class RemoveFieldsToTags < ActiveRecord::Migration
   def self.up
     remove_column :tags, :post_id
   end

   def self.down
     add_column :tags, :post_id, :references
   end
 end

When I run rake db:migrate and rake db:migrate:up VERSION= Nothing happens when I run rake db:migrate:down VERSION= I get column:

SQLite3::SQLException: duplicate column name: post_id: ALTER TABLE "tags" ADD "post_id" references

Any one know whats going on?

like image 201
rogermushroom Avatar asked Aug 17 '10 00:08

rogermushroom


1 Answers

It sounds as if Rails thinks your DB is up to date (given that nothing happens when you run db:migrate). You can get into this state if you've modified your migration after applying it (common during development).

Have you tried running db:migrate on a fresh db (note this will wipe your database)?

rake db:drop db:create db:migrate
like image 188
avaynshtok Avatar answered Oct 23 '22 17:10

avaynshtok