यदि आपको एक निर्माण करने की आवश्यकता है user_idतो यह एक उचित धारणा होगी कि आप एक उपयोगकर्ता तालिका का संदर्भ दे रहे हैं। किस स्थिति में प्रवास होगा:
rails generate migration AddUserRefToProducts user:references
यह आदेश निम्नलिखित माइग्रेशन उत्पन्न करेगा:
class AddUserRefToProducts < ActiveRecord::Migration
def change
add_reference :user, :product, index: true
end
end
rake db:migrateएक user_idकॉलम और एक इंडेक्स दोनों चलाने के बाद productsटेबल पर एक इंडेक्स जोड़ा जाएगा ।
यदि आपको किसी मौजूदा कॉलम में एक इंडेक्स जोड़ने की जरूरत है, उदाहरण nameके userलिए, तालिका निम्न तकनीक सहायक हो सकती है:
rails generate migration AddIndexToUsers name:string:index निम्नलिखित माइग्रेशन उत्पन्न करेगा:
class AddIndexToUsers < ActiveRecord::Migration
def change
add_column :users, :name, :string
add_index :users, :name
end
end
add_columnलाइन हटाएं और माइग्रेशन चलाएं।
वर्णित मामले में आप rails generate migration AddIndexIdToTable index_id:integer:indexआदेश जारी कर सकते हैं और फिर add_columnउत्पन्न माइग्रेशन से लाइन हटा सकते हैं । लेकिन मैंने प्रारंभिक माइग्रेशन को पूर्ववत करने और इसके बजाय संदर्भ जोड़ने की सिफारिश की है:
rails generate migration RemoveUserIdFromProducts user_id:integer
rails generate migration AddUserRefToProducts user:references