Ответ 1
Просто запустите
rails g migration add_description_to_products description:string
rails g migration add_product_type_to_products product_type:string
а затем запустите
rake db:migrate
В настоящее время у меня есть миграция под названием "Продукты", и я просто хочу добавить еще несколько строк для этой миграции, например описание и тип продукта. Каков наилучший способ сделать это?
class CreateProducts < ActiveRecord::Migration
def change
create_table :products do |t|
t.string :name
t.decimal :price
t.text :description
t.timestamps
end
end
end
Просто запустите
rails g migration add_description_to_products description:string
rails g migration add_product_type_to_products product_type:string
а затем запустите
rake db:migrate
В разработке любого практического приложения вы будете выполнять довольно много миграций, которые в основном относятся к документам DDL (язык определения данных). В реальной жизни у вас будет несколько сред (разработка, тестирование, производство и т.д.), И очень возможно, что вы будете менять базу данных разработки, пока у вас есть версия в производстве. По этой причине путь Rails состоит в том, чтобы генерировать новую миграцию для любых изменений в базе данных, а не вносить непосредственные изменения в существующий файл миграции.
Итак, ознакомьтесь с миграциями.
Для конкретного вопроса вы можете:
rails g migration add_attributes_to_products attr1 attr2 attr3
Это создаст новый файл миграции для добавления 3 новых атрибутов в таблицу продуктов (к модели продукта). Тип по умолчанию для атрибутов - string
. Для других вы указали это как:
rails g migration add_attributes_to_products attr1:integer attr2:text attr3:enum
Предполагая, что вы создали таблицу с приведенным выше перемещением, затем добавьте product_type (у вас уже было описание):
# db/migrate/20130201121110_add_product_type_to_product.rb
class AddProductTypeToProduct < ActiveRecord::Migration
def change
add_column :products, :product_type, :string
Product.all.each do |product|
product.update_attributes!(:product_type => 'unknown')
end
end
end
используйте rollback
, если ваше последнее действие migration
rake db:rollback
Затем добавьте атрибуты в файл миграции
class CreateProducts < ActiveRecord::Migration
def change
create_table :products do |t|
t.string :name
t.decimal :price
t.text :description
t.string :product_type #adding product_type attribute to the products table
t.timestamps
end
end
end
После этого выполните миграцию с помощью
rake db:migrate
Если миграция не является вашим последним действием, сгенерируйте новый файл миграции в приведенных выше ответах
rails g migration add_attributes_to_products product_type:string
Приведенный выше код генерирует только файл миграции, но вы хотите использовать rake db:migrate
для переноса файла.
Если вы хотите сделать какие-либо изменения в этом файле миграции, такие как добавление дополнительных атрибутов, сделайте это перед миграцией, иначе вы должны использовать метод, о котором я упоминал в начале, если ваше последнее действие является миграцией или вам нужно создать другую миграцию файл. проверьте эту ссылку, чтобы узнать больше о миграции http://guides.rubyonrails.org/v3.2.8/migrations.html
rake генерировать миграцию add_description_to_products
AddDescriptionToProducts < ActiveRecords:: Migration[v]
def change
add_column :products :description :string
add_column :name_of_table :name_of_column :data_type
end
запустите rake db: migrate и ваш schema.rb должен быть обновлен