2011-07-20 10 views
5

के साथ कॉलम जोड़ें मेरे पास कुछ कॉलम के साथ profiles नामक एक तालिका है।रेल 3.1 परिवर्तन_टेबल माइग्रेशन

अब मैं change - रेल 3.1 में विधि का उपयोग करके इस तालिका में कुछ कॉलम जोड़ना चाहता हूं। मैं निम्नलिखित कोड के साथ एक प्रवास बनाया:

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

रेल 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: संदर्भ जोड़ने से तालिका में प्रकार पूर्णांक का एक आईडी फ़ील्ड जोड़ता है - आप इसे 'add_column: प्रोफाइल,: user_id,: integer' के साथ दोहरा सकते हैं। – sevenseacat

+0

'संदर्भ' '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

संबंधित मुद्दे