57

現在、製品という名前の移行があります。この移行に、説明や製品タイプなどの文字列をいくつか追加したいだけです。これを行う最善の方法は何ですか?

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 に答える
2

上記の移行でテーブルを作成したと仮定すると、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
于 2013-03-01T16:41:26.037 に答える