Как я могу переименовать столбец базы данных в миграции Ruby on Rails?

Вы можете сделать это с помощью выражения Java 8 lambda:

LinkedList<String> list=new LinkedList<String>();
list.add("bgh");
list.add("asd");
list.add("new");
//lambda expression
list.sort((a,b)->a.compareTo(b));
1390
задан Peter Mortensen 3 March 2016 в 21:50
поделиться

3 ответа

rename_column :table, :old_column, :new_column

Обновление:

Вероятно, вы захотите создать для этого отдельную миграцию. (Переименуйте 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

В то время как вверх и вниз методы все еще применимы. В рельсах 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

Спасибо, Люк && Турадг, за то, что подняли эту тему.

Затем просто db:migrate, как обычно, или как бы вы ни занимались своими делами.


Обновление для Rails 4

При создании Migration для переименования колонки, Rails 4 генерирует метод change вместо up и down, как упоминалось в вышеуказанном ответе. Сгенерированное изменение как показано ниже :

$ > rails g migration ChangeColumnName

, который создаст файл миграции, похожий на этот :

class ChangeColumnName < ActiveRecord::Migration
  def change
    rename_column :table_name, :old_column, :new_column
  end
end
2253
ответ дан 22 November 2019 в 20:19
поделиться

http://api.rubyonrails.org/classes/ActiveRecord/Migration.html

В разделе Available Transformations

rename_column(table_name, column_name, new_column_name):

Переименовывает столбец, но сохраняет его тип и содержание.

26
ответ дан 22 November 2019 в 20:19
поделиться

ИМО, в этом случае лучше использовать грабли db:rollback. Затем отредактируйте свой переход и снова наберите rake db:migrate. Однако, если у вас есть данные в колонке, которые вы не хотите потерять, то используйте rename_column.

.
67
ответ дан 22 November 2019 в 20:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: