Подтвердить что ты не робот

Rails генерирует миграцию

В настоящее время у меня есть миграция под названием "Продукты", и я просто хочу добавить еще несколько строк для этой миграции, например описание и тип продукта. Каков наилучший способ сделать это?

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
4b9b3361

Ответ 1

Просто запустите

rails g migration add_description_to_products description:string
rails g migration add_product_type_to_products product_type:string

а затем запустите

rake db:migrate

Ответ 2

В разработке любого практического приложения вы будете выполнять довольно много миграций, которые в основном относятся к документам 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

Ответ 3

Предполагая, что вы создали таблицу с приведенным выше перемещением, затем добавьте 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

Ответ 4

используйте 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

Ответ 5

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 должен быть обновлен