我有一個須要一個:email
列的Users模型(我忘記在初始支架中添加該列)。 html
我打開了遷移文件,並添加了t.string :email
,作了rake db:migrate
,獲得了NoMethodError
。 而後我添加了線 數據庫
add_column :users, :email, :string
再次rake db:migrate
,再次rake db:migrate
NoMethodError
。 我在這裏錯過了一步嗎? ruby
編輯:這是遷移文件。 架構
class CreateUsers < ActiveRecord::Migration def self.up add_column :users, :email, :string create_table :users do |t| t.string :username t.string :email t.string :crypted_password t.string :password_salt t.string :persistence_token t.timestamps end end def self.down drop_table :users end end
你也能夠 ide
rake db:rollback
若是還沒有向表中添加任何數據。而後經過向其添加電子郵件列來編輯遷移文件,而後調用 ui
rake db:migrate
若是您的系統中已安裝Rails 3.1及更高版本,則此方法將起做用。 spa
更簡單的方法是更改,讓遷移文件中的更改保持原樣。 採用 code
$rake db:migrate:redo
這將回滾上一次遷移並再次遷移。 htm
在Rails控制檯上使用此命令 token
rails generate migration add_fieldname_to_tablename fieldname:string
和
rake db:migrate
運行此遷移
要添加列,我只須要遵循如下步驟:
rails generate migration add_fieldname_to_tablename fieldname:string
另類
rails generate migration addFieldnameToTablename
生成遷移後,請編輯遷移並定義要添加該列的全部屬性。
注意 :Rails中的表名稱始終是複數形式(以匹配數據庫約定)。 使用前面提到的步驟之一的示例-
rails generate migration addEmailToUsers
rake db:migrate
要麼
db/schema.rb
更改架構,在SQL查詢中添加所需的列。 運行如下命令: rake db:schema:load
警告/注意
請記住,運行rake db:schema:load
自動擦除表中的全部數據。
您能夠經過如下方式回滾上一次遷移
rake db:rollback STEP=1
或回滾此特定遷移
rake db:migrate:down VERSION=<YYYYMMDDHHMMSS>
並編輯文件,而後再次運行rake db:mirgate
。
您也能夠這樣作.. rails g migration add_column_to_users email:string
而後rake db:migrate還要在用戶控制器中添加:email屬性;
有關更多詳細信息,請訪問http://guides.rubyonrails.org/active_record_migrations.html