0

I created a table called Query and now have to rename it because I can't use it in models due to Query being a reserved word. I'm renaming it to SupportQuery.

Query has a reference to UsersQuery

class CreateQueries < ActiveRecord::Migration[5.0]
  def change
    create_table :queries do |t|
      t.string :name
      t.timestamps
    end
  end
end


class CreateUsersQueries < ActiveRecord::Migration[5.0]
  def change
    create_table :users_queries do |t|
      t.string :name
      t.references :query, foreign_key: true
      t.references :user, foreign_key: true
      t.timestamps
    end
  end
end

This is my attempt at renaming it and renaming the reference.

class RenameQueryTables < ActiveRecord::Migration[5.0]
  def change
    rename_column :users_queries, :query_id, :support_query_id
    rename_table :queries, :support_queries
    rename_table :users_queries, :user_support_queries
  end
end

I receive foreign key constraints. Next I tried to remove the reference then adding it again.

class RenameQueryTables < ActiveRecord::Migration[5.0]
  def change
    remove_reference :users_queries, :query, foreign_key: true        
    rename_table :queries, :support_queries
    rename_table :users_queries, :user_support_queries
    remove_reference :user_support_queries, :support_query, foreign_key: true
  end
end

But this removes my current data in the column. Any help would really be appreciated!

Iaan Krynauw
  • 311
  • 3
  • 16
  • How about this? http://stackoverflow.com/questions/471416/how-do-you-write-a-migration-to-rename-an-activerecord-model-and-its-table-in-ra – Akash Agarwal Oct 28 '16 at 09:07
  • Doesn't rename the reference (foreign key) query_id. – Iaan Krynauw Oct 28 '16 at 09:47
  • http://stackoverflow.com/questions/35226357/change-foreign-key-column-name-in-rails – Akash Agarwal Oct 28 '16 at 09:50
  • I saw that one and I still get a (errno: 150) mysql foreign key restraint. It was part of my first attempt. – Iaan Krynauw Oct 28 '16 at 09:52
  • 1
    == 20161027134828 RenameQueryTables: migrating ================================ -- rename_column(:users_queries, :query_id, :support_query_id) rails aborted! StandardError: An error has occurred, all later migrations canceled: Mysql2::Error: Error on rename of './db_name/#sql-58f_ba' to './db_name/users_queries' (errno: 150): ALTER TABLE `users_queries` CHANGE `query_id` `support_query_id` int(11) – Iaan Krynauw Oct 28 '16 at 09:54
  • Remove references with one migration. Then change table names with another migration. Then put references back. If you then have trouble with adding the references, you can instead add the required fields "manually", like `add_column :user_support_queries, :support_query_id, :integer`. The result is the same. – Jussi Hirvi Nov 28 '22 at 10:21

0 Answers0