2011-07-20 14 views
5

私はprofilesという名前のテーブルをいくつかの列に持っています。Rails 3.1 change_tableの移行で列を追加する

今度は、レール3.1のchangeの方法を使用してこの表にいくつかの列を追加します。私は、次のコードでの移行を作成:

def change 
    change_table :profiles do |t| 
    t.string :photo 
    t.string :name 
    t.references :user 
    end 
end 

移行が完璧に動作しますが、私はロールバックしたいとき、私はなぜ

SQLite3::SQLException: duplicate column name: photo: ALTER TABLE "profiles" ADD "photo" varchar(255) 

任意のアイデアを得ますか?

答えて

5

のRails 3.1で列を追加するための自動生成の移行は形式になります。

class AddColumnToTable < ActiveRecord::Migration 
    def change 
    add_column :table, :column, :type 
    end 
end 

おそらく、その構文を試してみてください?あなたが自分自身を元に戻すためにどのように移行を指示する必要がありますように見えます

+0

何ADD_COLUMNとの参照の追加については?私はこれのようにすることができると思います:http://stackoverflow.com/questions/493777/add-column-for-references-rails/493802#493802しかし、それはより柔軟に移行に直接追加することができるでしょうどういうわけか。 – martnu

+0

@martnu:参照を追加すると、整数型のIDフィールドがテーブルに追加されます。これを 'add_column:profiles、:user_id、:integer'で複製できます。 – sevenseacat

+0

'reference'は' assoc_id'カラムにもインデックスを追加します。これは便利です。 – Jeriko

0

def change 
    change_table :profiles do |t| 
    t.string :photo 
    t.string :name 
    t.references :user 
    end 

    reversible do |dir| 
    dir.down do 
     remove_column :profiles, :photo 
     remove_column :profiles, :name 
     remove_column :profiles, :user_id 
    end 
    end 
end 

は、より多くの情報のためhttp://guides.rubyonrails.org/migrations.html#using-reversibleを参照してください。また

あなたがそうのようにまだ使用可能ですアップ古いとダウン方法を使用して試みることができる:アップ/ダウン、ここで

def up 
    change_table :profiles do |t| 
    t.string :photo 
    t.string :name 
    t.references :user 
    end 
end 

def down 
    remove_column :profiles, :photo 
    remove_column :profiles, :name 
    remove_column :profiles, :user_id 
end 

より:http://guides.rubyonrails.org/migrations.html#using-the-up-down-methods

関連する問題