2013-03-01 8 views
34

私は現在、製品と呼ばれるマイグレーションを持っています。このマイグレーションには、説明や製品タイプなどの文字列を追加するだけです。これを行う最善の方法は何ですか?Railsによってマイグレーションが生成される

あなたが行うだろう(すでに説明していた)PRODUCT_TYPEを追加し、その後、あなたは上記の移行でテーブルを作成したと仮定すると、
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 
+1

http:// guides.rubyonrails.org/migrations.html#using-the-change-method'を見ましたか – hwatkins

+5

はいマニュアルを読んだことがありますが、私。これが私が求めている理由です。 ちょっとしたガイドをお読みになりたいと思っています:) –

+0

マイグレーションをマイグレーションしていない場合は、マイグレーションファイルに直接 't.integer:product_type'を使って変更することができます。開発作業中の私の方法は、マイグレーション後に直接マイグレーションに変更され、プッシュする準備ができたら、dbをリセットしたり、dbを再作成したりするだけでした。そうすれば、マイグレーションファイルをよりきれいにすることができます。ちょうど分け前、希望が助けることができる。 – ksugiarto

答えて

2

:任意の実用的なアプリケーションの開発において

# 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 
11

、あなたがやっているだろう基本的に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 
50

だけ

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

を実行して、あなたの最後のアクションがmigration

rake db:rollback 

ある場合

rake db:migrate 
+1

以下の3行の 'rails generate migration'コマンドは' script/generate migration ... 'となります –

+0

新しい列のデフォルトの型は' string'です。実際にはコマンドで明示的に指定する必要はありません別のタイプ。 –

0

使用rollbackを実行します。他の人のために、あなたが好きそれを指定していザn個の移行があなたの最後のアクションではない場合

rake db:migrate 

を使用して、その移行した後に移行ファイル

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 

に属性を追加し、上記の回答での、新しい移行ファイルを生成

rails g migration add_attributes_to_products product_type:string 

上記のコードはマイグレーションファイルを生成するだけですが、rake db:migrateを使用してファイルをマイグレーションします。

マイグレーションの前にもっと多くの属性を追加するなど、そのマイグレーションファイルにこれ以上の変更を加えたい場合は、前回のアクションがマイグレーションの場合は前述の方法を使用する必要があります。移行ファイル。 チェックこのリンクは生成 http://guides.rubyonrails.org/v3.2.8/migrations.html

+0

誰かを助けることを願っています – vinoth

0

熊手の移行についての詳細を知る移行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 

実行すくいデシベルをする:移行すると、あなたのスキーマ。rbは更新する必要があります

関連する問題