1

データベースとして mysql を使用して Rails Web アプリケーションを開発しています。3列のテーブルを作成しました。「rake db:migrate」コマンドはすでに実行しています。

しかし、テーブルにさらに 2 つの列を追加する必要があります。このコマンドを実行しようとしました:

rails generate migration Add'col1'And'col2'To col1:integer col2:integer

\db\migrate\次の内容のフォルダーにファイルを作成しています。

class Add<col1>And<col2>To<table_name> < ActiveRecord::Migration
  def change
    add_column :<table_name>, :<col1>, :integer
    add_column :<table_name>, :<col2>, :integer
  end
end

しかし、mysql にアクセスしてテーブルの内容を見ると、列が追加されていません。既存のテーブルに列を追加するにはどうすればよいですか?

助けてください。

4

5 に答える 5

1

移行を作成するだけでなく、次を使用して実行する必要があります。rake db:migrate

于 2013-02-15T08:52:31.443 に答える
0

移行は、移行クラスごとに 1 つずつ、db/migrate ディレクトリにファイルとして保存されます。ファイルの名前は TIMESTAMP_create_products.rb の形式です。つまり、移行を識別する UTC タイムスタンプの後にアンダースコアと移行の名前が続きます。Rails はこのタイムスタンプを使用して、どのマイグレーションをどのような順序で実行する必要があるかを判断します。そのため、別のアプリケーションからマイグレーションをコピーしたり、自分でファイルを生成したりする場合は、その順序に注意してください。

データベースのテーブルに特定の列を追加するには、rails コマンドを入力する必要があります。

rails generate migration addColumnToProducts column:type

それが完了したら、次のことができます

rake db:移行

次の名前の新しい移行が 1 つ追加されていることがわかります。

次のコードを持つ TIMESTAMP_add_column_to_products.rb:

class addColumnToProducts < ActiveRecord::Migration
  def change
    add_column :products, :column, :type
  end
end

そして、データベースのテーブルに列を正常に追加しました。

于 2014-04-14T13:11:13.423 に答える
0

そのため、既存のテーブルに新しい列を追加します。migration を使用して次の手順を実行することで、それを行うことができます。

1 -rails generate migration AddColumnToTableName

2 -表示される移行ファイルを開きます

AddColumnToTableName < ActiveRecord::Migration[5.0] def change end end

3 -#change関数内に必要な新しい列を挿入します

 add_column :products, :part_number, :string
           (tablename) (coulmn name) (data type)

4-最終的にはこのようになるはずです

class AddPartNumberToProducts < ActiveRecord::Migration[5.0] def change add_column :products, :part_number, :string end end

移行についてもっと知りたいですか?

于 2016-02-06T20:39:43.703 に答える
0

http://guides.rubyonrails.org/migrations.html#migrations-are-classes

def change
     add_column :products, :part_number, :string
                 ^            ^              ^
                 table        column name    type
end

移行を定義したら、再度 db:migrate を実行する必要があります

于 2013-02-15T08:54:08.257 に答える
0

レールは移行を生成します AddCol1AndCol2ToTable col1:integer col2:integer

テーブル名付きのraplaceテーブル

于 2013-02-15T08:56:01.140 に答える