Я неправильно назвал столбец hased_password вместо hashed_password.
Как обновить схему базы данных, используя миграцию, чтобы переименовать этот столбец?
Я неправильно назвал столбец hased_password вместо hashed_password.
Как обновить схему базы данных, используя миграцию, чтобы переименовать этот столбец?
rename_column :table, :old_column, :new_column
Update:
Возможно, вам захочется создать отдельный перенос, чтобы сделать это. (Переименуйте имя FixColumnName, как и вы)
script/generate migration FixColumnName
# creates  db/migrate/xxxxxxxxxx_fix_column_name.rb
Затем отредактируйте перенос, чтобы выполнить свою волю.
# db/migrate/xxxxxxxxxx_fix_column_name.rb
class FixColumnName < ActiveRecord::Migration
  def self.up
    rename_column :table_name, :old_column, :new_column
  end
  def self.down
    # rename back if you need or do something else or do nothing
  end
end
Обновление для Rails 3.1
Пока применяются методы up и down. Rails 3.1 получает метод change, который  "знает, как перенести вашу базу данных и отменить ее, когда миграция откатывается без необходимости писать отдельный метод вниз" 
rails g migration FixColumnName
class FixColumnName < ActiveRecord::Migration
  def change
    rename_column :table_name, :old_column, :new_column
  end
end
Если вам нужно переименовать целую кучу столбцов или что-то, что потребовало бы повторения имени таблицы снова и снова.
rename_column :table_name, :old_column1, :new_column1
rename_column :table_name, :old_column2, :new_column2
...
Вы можете использовать change_table, чтобы держать вещи немного опрятными.
class FixColumnNames < ActiveRecord::Migration
  def change
    change_table :table_name do |t|
      t.rename :old_column1, :new_column1
      t.rename :old_column2, :new_column2
      ...
    end
  end
end
Спасибо, Luke && Turadg, для воссоздания темы.
Затем просто db:migrate, как обычно, или же вы делаете свой бизнес.
Обновление для Rails 4
При создании Migration для переименования столбца Rails 4 генерирует метод change вместо up и down, как указано в приведенном выше ответе. Сгенерированный метод change выглядит следующим образом:
$ > rails g migration ChangeColumnName
который создаст файл миграции, подобный этому:
class ChangeColumnName < ActiveRecord::Migration
  def change
    rename_column :table_name, :old_column, :new_column
  end
end
IMO, в этом случае лучше использовать rake db:rollback. Затем отредактируйте свою миграцию и снова введите rake db:migrate. Однако, если у вас есть данные в столбце, который вы не хотите потерять, используйте rename_column.
http://api.rubyonrails.org/classes/ActiveRecord/Migration.html
В разделе Available Transformations
 rename_column(table_name, column_name, new_column_name):
Переименовывает столбец, но сохраняет тип и содержимое.
Если столбец уже заполнен данными и живет в процессе производства, я бы рекомендовал поэтапный подход, чтобы избежать простоев в производстве, ожидая миграции.
Сначала я создал миграцию db, чтобы добавить столбцы с новыми именами и заполнить их значениями из старого имени столбца.
class AddCorrectColumnNames < ActiveRecord::Migration
  def up
    add_column :table, :correct_name_column_one, :string
    add_column :table, :correct_name_column_two, :string
    puts 'Updating correctly named columns'
    execute "UPDATE table_name SET correct_name_column_one = old_name_column_one, correct_name_column_two = old_name_column_two"
    end
  end
  def down
    remove_column :table, :correct_name_column_one
    remove_column :table, :correct_name_column_two
  end
end
Затем я бы совершил именно это изменение и перетащил его в производство.
git commit -m 'adding columns with correct name'
Затем, как только коммит будет запущен в производство, я запустил.
Production $ bundle exec rake db:migrate
Затем я обновил все представления/контроллеры, которые ссылались на имя старого столбца, на новое имя столбца. Запустите мой тестовый набор и скопируйте только те изменения. (Убедившись, что он работает локально и сначала проходит все тесты!)
git commit -m 'using correct column name instead of old stinky bad column name'
Тогда я бы нажал эту фиксацию на производство.
В этот момент вы можете удалить исходный столбец, не беспокоясь о каком-либо простоя, связанного с самой миграцией.
class RemoveBadColumnNames < ActiveRecord::Migration
  def up
    remove_column :table, :old_name_column_one
    remove_column :table, :old_name_column_two
  end
  def down
    add_column :table, :old_name_column_one, :string
    add_column :table, :old_name_column_two, :string
  end
end
Затем нажмите эту последнюю миграцию на производство и запустите bundle exec rake db:migrate в фоновом режиме.
Я понимаю, что это немного больше связано с процессом, но я предпочел бы сделать это, чем проблемы с моей производственной миграцией.
Запустите команду ниже, чтобы создать файл миграции:
rails g migration ChangeHasedPasswordToHashedPassword
Затем в файле, сгенерированном в папке db/migrate, напишите rename_column, как показано ниже:
class ChangeOldCoulmnToNewColumn < ActiveRecord::Migration
  def change
     rename_column :table_name, :hased_password, :hashed_password
  end
end
Из API:
rename_column(table_name, column_name, new_column_name)
Он переименовывает столбец, но сохраняет тип и содержимое таким же.
Некоторые версии Ruby on Rails поддерживают метод up/down для миграции, и если у вас есть метод up/down в вашей миграции, то:
def up
    rename_column :table_name, :column_old_name, :column_new_name
end
def down
    rename_column :table_name, :column_new_name, :column_old_name
end
Если у вас есть метод change в вашей миграции, то:
def change
    rename_column :table_name, :column_old_name, :column_new_name
end
Для получения дополнительной информации вы можете перемещаться: Ruby on Rails - Миграции или Миграции активной записи.
Если ваш код не используется совместно с другим, лучшим вариантом является просто rake db:rollback
затем измените имя столбца в процессе миграции и rake db:migrate. Thats it
И вы можете написать еще одну миграцию, чтобы переименовать столбец
 def change
    rename_column :table_name, :old_name, :new_name
  end
Вот оно.
Если вам нужно переключить имена столбцов, вам нужно создать местозаполнитель, чтобы избежать ошибки с повторяющимся именем столбца. Вот пример:
class SwitchColumns < ActiveRecord::Migration
  def change
    rename_column :column_name, :x, :holder
    rename_column :column_name, :y, :x
    rename_column :column_name, :holder, :y
  end
end
В качестве альтернативы, если вы не состоите в браке с идеей миграции, для ActiveRecord есть неотразимая жемчужина, которая будет автоматически обрабатывать изменения имени, стиль Datamapper. Все, что вам нужно сделать, это изменить имя столбца в вашей модели (и убедитесь, что вы поместили Model.auto_upgrade! Внизу вашего model.rb) и альт! База данных обновляется на лету.
https://github.com/DAddYE/mini_record
Примечание. Чтобы предотвратить конфликты, вам нужно использовать nub db/schema.rb
Все еще в бета-фазе и, очевидно, не для всех, но все же убедительный выбор (в настоящее время я использую его в двух нетривиальных производственных приложениях без проблем)
Если данные не важны для вас, вы можете просто удалить исходную миграцию, используя:
rake db:migrate:down VERSION='YOUR MIGRATION FILE VERSION HERE'
Без кавычек, внесите изменения в исходную миграцию и снова выполните перенастройку:
rake db:migrate
Просто создайте новую миграцию и в блоке используйте rename_column, как показано ниже.
rename_column :your_table_name, :hased_password, :hashed_password
Для Ruby on Rails 4:
def change
    rename_column :table_name, :column_name_old, :column_name_new
end
В ручном режиме мы можем использовать метод ниже:
Мы можем редактировать миграцию вручную, например:
Откройте app/db/migrate/xxxxxxxxx_migration_file.rb
Обновить hased_password до hashed_password
Выполните следующую команду
$> rake db:migrate:down VERSION=xxxxxxxxx
Затем он удалит вашу миграцию:
$> rake db:migrate:up VERSION=xxxxxxxxx
Он добавит вашу миграцию с обновленным изменением.
Сгенерировать файл миграции:
rails g migration FixName
# Создает db/migrate/xxxxxxxxxx.rb
Отредактируйте миграцию, чтобы выполнить свою волю.
class FixName < ActiveRecord::Migration
  def change
    rename_column :table_name, :old_column, :new_column
  end
end
$:  rails g migration RenameHashedPasswordColumn
invoke  active_record
      create    db/migrate/20160323054656_rename_hashed_password_column.rb
Откройте этот файл миграции и измените этот файл, как показано ниже (Do enter your original table_name)
class  RenameHashedPasswordColumn < ActiveRecord::Migration
  def change
    rename_column :table_name, :hased_password, :hashed_password
  end
end
Запустите rails g migration ChangesNameInUsers (или что бы вы хотели назвать)
Откройте только что сгенерированный файл миграции и добавьте эту строку в метод (между def change и end):
 rename_column :table_name, :the_name_you_want_to_change, :the_new_name
Сохраните файл и запустите rake db:migrate в консоли
Проверьте свой schema.db, чтобы узнать, действительно ли имя изменилось в базе данных!
Надеюсь, что это поможет:)
Создание миграции Ruby on Rails:
$:> rails g migration Fixcolumnname
Вставить код в файл миграции (XXXXXfixcolumnname.rb):
class Fixcolumnname < ActiveRecord::Migration
  def change
    rename_column :table_name, :old_column, :new_column
  end
end
 def change
    rename_column :table_name, :old_column_name, :new_column_name
  end
У вас есть два способа сделать это:
В этом типе он автоматически запускает обратный код, когда откатывается.
def change
  rename_column :table_name, :old_column_name, :new_column_name
end
Для этого типа он запускает метод up rake db:migrate и запускает метод down, когда rake db:rollback:
def self.up
  rename_column :table_name, :old_column_name, :new_column_name
end
def self.down
  rename_column :table_name,:new_column_name,:old_column_name
end
Откройте консоль Ruby on Rails и введите:
ActiveRecord::Migration.rename_column :tablename, :old_column, :new_column
Я на рельсах 5.2, и пытаюсь переименовать столбец на устройстве пользователя.
 бит rename_column работал для меня, но в единственном числе :table_name rename_column ошибку "Таблица пользователей не найдена". Множество работало на меня.
rails g RenameAgentinUser
Затем измените файл миграции на этот:
rename_column :users, :agent?, :agent
Где: агент? старое имя столбца
Просто выполните миграцию с помощью команды
rails g migration rename_hased_password
После этого отредактируйте перенос, добавьте следующую строку в метод изменения
rename_column :table, :hased_password, :hashed_password
Это должно сделать трюк.
Изменения в миграции на Rails 5
например:
рельсы г модель Студент студент_имя: строка возраст: целое число
если вы хотите изменить столбец student_name как имя
Примечание: - если вы не запускаете rails db: migrate
Вы можете сделать следующие шаги
рельсы d модель Студент имя студента: возраст строки: целое число
Это удалит сгенерированный файл миграции, теперь вы можете исправить имя столбца
рельсы g модель Имя студента: возраст строки: целое число
Если вы мигрировали (rails db: migrate), следующие опции для изменения имени столбца
рельсы и миграция RemoveStudentNameFromStudent имя_студента: строка
рельсы г миграции AddNameToStudent имя: строка
Пусть поцелуй. Все это занимает три простых шага. Следующие работы для Rails 5.2.
 rails g migration RenameNameToFullNameInStudents
 rails g RenameOldFieldToNewFieldInTableName - таким образом, это будет совершенно ясно сопровождающим базы кода позже. (используйте множественное число для названия таблицы).
 # я prefer to explicitly write the methods. вверх and вниз methods.
 #./db/migrate/20190114045137_rename_name_to_full_name_in_students.rb
class RenameNameToFullNameInStudents < ActiveRecord::Migration[5.2]
  def up
    # rename_column :table_name, :old_column, :new_column
    rename_column :students, :name, :full_name
  end
  def down
            # Note that the columns are reversed
    rename_column :students, :full_name, :name
  end
end
 rake db:migrate
И вы отправитесь на гонки!
Обновить. Близким кузеном create_table является change_table, используемая для изменения существующих таблиц. Он используется аналогично create_table, но объект, полученный блоку, знает больше трюков. Например:
class ChangeBadColumnNames < ActiveRecord::Migration
  def change
    change_table :your_table_name do |t|
      t.rename :old_column_name, :new_column_name
    end
  end
end
Этот способ более эффективен, если мы делаем это с другими альтернативными методами, такими как: remove/add index/remove index/add column, например, мы можем сделать следующее:
# Rename
t.rename :old_column_name, :new_column_name
# Add column
t.string :new_column
# Remove column
t.remove :removing_column
# Index column
t.index :indexing_column
#...
Или используйте execute для выполнения SQL, но не рекомендуется
execute "ALTER TABLE table_name change COLUMN old_column_name new_colmn_name column_data_type;"