2014-10-12 70 views
1

我通過命令rails generate devise Users創建用戶模型。如何添加到設計模型?

我想我的Users模型保持不變但我想添加更多的列,但我不知道如何和我現在仍然有點困惑。我對Ruby on Rails很新穎。我不確定在做出這些更改之後,我應該運行什麼命令。我認爲它是rake db:migrate爲了更新數據庫。

我希望能夠加入

name - string 
address - string 
username - string .. 

根據這個實例文檔中,

class AddDetailsToProducts < ActiveRecord::Migration 
    def change 
    add_column :products, :part_number, :string  
    add_column :products, :price, :decimal 
    end 
end 

裏面的change方法,添加列part_number(串)和price(十進制)到products

請問

文件:20141011161019_devise_create_users.rb

class DeviseCreateUsers < ActiveRecord::Migration 
    def change 
    create_table(:users) do |t| 
     ## Database authenticatable 
     t.string :email,    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, null: false 
     t.datetime :current_sign_in_at 
     t.datetime :last_sign_in_at 
     t.inet  :current_sign_in_ip 
     t.inet  :last_sign_in_ip 

     ## 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, null: false # Only if lock strategy is :failed_attempts 
     # t.string :unlock_token # Only if unlock strategy is :email or :both 
     # t.datetime :locked_at 


     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 
    end 
end 

回答

2

不要改變現有的移民。您希望使用命令rails generate migration MigrationName創建新的遷移,然後按照Active Record Migrations Rails指南進行操作,該指南提供了大量有關如何添加數據庫列的示例。

+0

行'add_column:products,:part_number,:string'是否將列part_number(字符串)添加到產品表中? – Liondancer 2014-10-12 06:58:40

+1

是的。第一個參數是表名,第二個是字段名,第三個是類型。 – 2014-10-12 07:00:17

2

首先,運行rake db:migrate。這將運行devise在數據庫中準備的遷移。

之後,只需添加更多字段到您的模型,就像您從未安裝過設計一樣。第一步是生成一個新的遷移。在命令行中運行以下命令:

bin/rails generate migration AddNameAddressUsernameToUsers name:string address:string username:string

這將創建一個新的遷移文件。然後,您應該再次在rake db:migrate的數據庫上運行該遷移文件。之後,您應該能夠在控制器和視圖中引用這些新模型字段。

雖然您可以在一次遷移中完成所有操作,但通常情況下最好保持遷移小而離散。如果出現任何問題,這可以更輕鬆地解決問題。