Если вы хотите обновить таблицу, вы должны создать новый файл миграции, потому что каждая миграция выполняется только один раз в базе данных. Так что если у вас уже есть таблица posts
, то после изменения миграции create_posts
вы не сможете запустить ее снова.
Вы можете откатить миграции, а затем запустить их снова. Это решило бы проблему, но также уничтожило бы таблицу и данные, которые она могла бы содержать. Это не проблема, если вы только что создали миграцию, а затем заметили, что пропустили один столбец. Затем вы можете просто добавить столбец в миграцию, откат и миграцию. Но вы не хотите делать это в производственной базе данных!
Чтобы создать новую миграцию, просто запустите:
rails generate migration migration_name
Если вы называете свою миграцию add_*_to_table
, вы также можете передать те же аргументы, что и в generate model
:
rails generate migration add_something_to_posts something:boolean
Это автоматически сгенерирует эту миграцию:
class AddSomethingToPosts < ActiveRecord::Migration
def self.up
add_column :posts, :something, :boolean
end
def self.down
remove_column :posts, :something
end
end
Это будет работать и с remove_*_from_table
:
rails generate migration remove_something_from_posts something:boolean
Миграция будет:
class RemoveSomethingFromPosts < ActiveRecord::Migration
def self.up
remove_column :posts, :something
end
def self.down
add_column :posts, :something, :boolean
end
end
Вот еще несколько методов , которые вы можете использовать в своих миграциях.