我有一个需要:email列的用户模型(我忘记在初始脚手架期间添加该列)。
:email
我打开迁移文件并添加t.string :email、rake db:migrate执行并获得了NoMethodError. 然后我添加了这一行
t.string :email
rake 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
如果您已经运行了原始迁移(在编辑之前),那么您需要生成一个新的迁移(rails generate migration add_email_to_users email:string可以解决问题)。它将创建一个包含以下行的迁移文件: add_column :users, email, string 然后执行 a rake db:migrate,它将运行新的迁移,创建新列。
rails generate migration add_email_to_users email:string
add_column :users, email, string
如果您尚未运行原始迁移,您可以像您尝试做的那样对其进行编辑。您的迁移代码 几乎 是完美的:您只需要add_column完全删除该行(该代码试图在创建表之前将列添加到表中,并且您的表创建代码已经更新为包含 a t.string :email)。
add_column