在Rails迁移中将列添加到现有表

我有一个须要一个: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

#1楼

你也能够 ide

rake db:rollback

若是还没有向表中添加任何数据。而后经过向其添加电子邮件列来编辑迁移文件,而后调用 ui

rake db:migrate

若是您的系统中已安装Rails 3.1及更高版本,则此方法将起做用。 spa

更简单的方法是更改​​,让迁移文件中的更改保持原样。 采用 code

$rake db:migrate:redo

这将回滚上一次迁移并再次迁移。 htm


#2楼

在Rails控制台上使用此命令 token

rails generate migration add_fieldname_to_tablename fieldname:string

rake db:migrate

运行此迁移


#3楼

要添加列,我只须要遵循如下步骤:

  1. rails generate migration add_fieldname_to_tablename fieldname:string

    另类

    rails generate migration addFieldnameToTablename

    生成迁移后,请编辑迁移并定义要添加该列的全部属性。

    注意 :Rails中的表名称始终是复数形式(以匹配数据库约定)。 使用前面提到的步骤之一的示例-

    rails generate migration addEmailToUsers

  2. rake db:migrate

要么

  1. 您能够从db/schema.rb更改架构,在SQL查询中添加所需的列。
  2. 运行如下命令: rake db:schema:load

    警告/注意

    请记住,运行rake db:schema:load自动擦除表中的全部数据。


#4楼

您能够经过如下方式回滚上一次迁移

rake db:rollback STEP=1

或回滚此特定迁移

rake db:migrate:down VERSION=<YYYYMMDDHHMMSS>

并编辑文件,而后再次运行rake db:mirgate


#5楼

您也能够这样作.. rails g migration add_column_to_users email:string

而后rake db:migrate还要在用户控制器中添加:email属性;

有关更多详细信息,请访问http://guides.rubyonrails.org/active_record_migrations.html

相关文章
相关标签/搜索