2012-09-23 17 views
14

モデルの1つにid列がないRailsアプリケーションがあります。移行のID列を追加する

create_table(:the_model, :id => false) do |t| 
    # columns 
end 

は今、新しい移行に、私は(データベース固有のSQLを使用していない)Railsの標準的な方法でid列を追加する:いくつかの研究をやって、私はそれを作成し、移行を見つけました。どうやってやるの?

change_table(:the_model, :id => true) do |t| 
end 

答えて

31

あなたが手動id列を追加することができます:

は、私はすでに成功せず、これを試してみました

add_column :table_name, :id, :primary_key 

したり、データクリア(またはバックアップ)、この移行へのロールバック、取り除きますオプション:id => falseのいずれかを選択し、再移行します。

+0

コマンドが機能しました!それは既に主キーを持っていたので、私はテーブル( 'drop_table'と' create_table'を移行中)を再作成しました。どうもありがとう! – alf

+0

それも動作します!問題ない。 – cdesrosiers

+2

マイグレーションを実行すると、既存のレコードのID列に一意のID値が自動的に取り込まれますか?そうでない場合、システムを幸せに保つためにどのように割り当てますか? –

5

あなたはすでにここにあなたの答えを得たが、移行ファイル名の構文で

rails generate migration AddIdToModel id:integer 

ルックは、列の記述を踏襲 ColumnNameにテーブル名に追加このケースでは、すべてのない1つのライナーです。 それはあなたが何か他のもののために感じれば今、あなたは、この行を変更することができます

class AddIdToModel < ActiveRecord::Migration 
    def change 
    add_column :models, :id, :integer 
    end 
end 

以下のようなものが生成されます。ちょうどrake db:migrateを実行してください。

+3

'rails g migration add_id_to_model id:primary_key'あなたのためにすべてをやっている – dubadub

2

あなたは

rails g migration add_id_to_model id:primary_key:integerが私のために働い言及する必要はありません。

関連する問題