मेरे पास "उपयोगकर्ता" नामक मॉडल बनाया गया है और मैंने उपयोगकर्ता तालिका में कुछ कॉलम जोड़ने के लिए एक नया माइग्रेशन बनाया है। अब जब मैं रेक db चलाएँ: विस्थापित, मैं नीचे b/c यह उपयोगकर्ताओं को तालिका बनाने के लिए फिर सेरेल में कॉलम जोड़ने के लिए माइग्रेशन बनाने वाले रेल रेक डीबी चलाते समय त्रुटि का कारण बनते हैं: माइग्रेट
$ rake db:migrate
== DeviseCreateUsers: migrating ==============================================
-- create_table(:users)
rake aborted!
An error has occurred, all later migrations canceled:
Mysql::Error: Table 'users' already exists: CREATE TABLE `users`.....
क्यों यह तालिका फिर से बनाने के लिए कोशिश कर रहा है कोशिश कर रहा है त्रुटि मिलती है?
यहाँ आदेश मैं नया माइग्रेशन
$ rails generate migration AddDetailsToUsers home_phone:decimal cell_phone:decimal work_phone:decimal birthday:date home_address:text work_address:text position:string company:string
नया माइग्रेशन इस तरह दिखता है बनाने के लिए इस्तेमाल है:
class AddDetailsToUsers < ActiveRecord::Migration
def change
add_column :users, :home_phone, :decimal
add_column :users, :cell_phone, :decimal
add_column :users, :work_phone, :decimal
add_column :users, :birthday, :date
add_column :users, :home_address, :text
add_column :users, :work_address, :text
add_column :users, :position, :string
add_column :users, :company, :string
end
end
संपादित
20120511224920_devise_create_users
class DeviseCreateUsers < ActiveRecord::Migration
def change
create_table(:users) do |t|
## Database authenticatable
t.string :email, :null => false, :default => ""
t.string :username, :null => false, :default => ""
t.string :encrypted_password, :null => false, :default => ""
## Recoverable
t.string :reset_password_token
t.datetime :reset_password_sent_at
## Rememberable
t.datetime :remember_created_at
## Trackable
t.integer :sign_in_count, :default => 0
t.datetime :current_sign_in_at
t.datetime :last_sign_in_at
t.string :current_sign_in_ip
t.string :last_sign_in_ip
## Encryptable
# t.string :password_salt
## Confirmable
# t.string :confirmation_token
# t.datetime :confirmed_at
# t.datetime :confirmation_sent_at
# t.string :unconfirmed_email # Only if using reconfirmable
## Lockable
# t.integer :failed_attempts, :default => 0 # Only if lock strategy is :failed_attempts
# t.string :unlock_token # Only if unlock strategy is :email or :both
# t.datetime :locked_at
## Token authenticatable
# t.string :authentication_token
t.timestamps
end
add_index :users, :email, :unique => true
add_index :users, :reset_password_token, :unique => true
# add_index :users, :confirmation_token, :unique => true
# add_index :users, :unlock_token, :unique => true
# add_index :users, :authentication_token, :unique => true
end
end
20120619023856_add_name_to_users
class AddNameToUsers < ActiveRecord::Migration
def change
add_column :users, :first_name, :string
add_column :users, :last_name, :string
end
end
20121031174720_add_details_to_users.rb
class AddDetailsToUsers < ActiveRecord::Migration
def change
add_column :users, :home_phone, :decimal
add_column :users, :cell_phone, :decimal
add_column :users, :work_phone, :decimal
add_column :users, :birthday, :date
add_column :users, :home_address, :text
add_column :users, :work_address, :text
add_column :users, :position, :string
add_column :users, :company, :string
end
end
आउटपुट से ऐसा लगता है कि आपके नए माइग्रेशन पर नहीं, DeviseCreateUsers के दौरान त्रुटि होती है .. क्या आपके पास एक और (पुराना) माइग्रेशन है जो पहले ही उपयोगकर्ता तालिका बना चुका है? – fwalch
हां मैं करता हूं। लेकिन मैंने सोचा कि मैं एक नया माइग्रेशन जोड़ने में सक्षम होना चाहिए जैसा कि मैंने किया था और रेक डीबी चला रहा था: माइग्रेट केवल माइग्रेशन चलाएगा जो वर्तमान में नहीं चल रहा है। – Catfish
नया माइग्रेशन भी नहीं चलता है; ऐसा लगता है कि आपके पास दो अन्य हैं जो दोनों उपयोगकर्ता तालिका ('DeviseCreateUsers' और पुराने माइग्रेशन) बनाने का प्रयास करते हैं। तालिका बनाने की कोशिश करने के बजाय आपको 'add_column' का उपयोग करने के लिए शायद 'DeviseCreateUsers' को बदलना चाहिए। – fwalch