57

我目前有一个名为 Products 的迁移,我只想在此迁移中添加更多字符串,例如描述和产品类型。做这个的最好方式是什么?

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
4

5 回答 5

84

赶紧跑

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

然后运行

rake db:migrate
于 2013-11-15T18:47:10.803 回答
20

在任何实际应用程序的开发中,您将进行相当多的迁移,这些迁移基本上是 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
于 2013-03-01T20:19:43.463 回答
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

于 2017-07-14T07:51:41.457 回答
2

Assuming you created the table with the migration above, then to add product_type (you already had description) you would do:

# 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
于 2013-03-01T16:41:26.037 回答
2

rails 生成迁移 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将自动更新

于 2017-11-22T09:42:55.187 回答