小编典典

在 Rails 迁移中向现有表添加列

all

我有一个需要:email列的用户模型(我忘记在初始脚手架期间添加该列)。

我打开迁移文件并添加t.string :emailrake db:migrate执行并获得了NoMethodError. 然后我添加了这一行

add_column :users, :email, :string

再一次rake db:migrate,再一次NoMethodError。我在这里错过了一步吗?

编辑:这是迁移文件。

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

阅读 98

收藏
2022-03-23

共1个答案

小编典典

如果您已经运行了原始迁移(在编辑之前),那么您需要生成一个新的迁移(rails generate migration add_email_to_users email:string可以解决问题)。它将创建一个包含以下行的迁移文件: add_column :users, email, string 然后执行
a rake db:migrate,它将运行新的迁移,创建新列。

如果您尚未运行原始迁移,您可以像您尝试做的那样对其进行编辑。您的迁移代码 几乎
是完美的:您只需要add_column完全删除该行(该代码试图在创建表之前将列添加到表中,并且您的表创建代码已经更新为包含 a t.string :email)。

2022-03-23