我有一个用户模型,它需要一个:email列(我忘记在初始脚手架期间添加该列)。
我打开迁移文件并添加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
你也可以使用before column或after column将列添加到特定位置,如下所示:
rails generate migration add_dob_to_customer dob:date
迁移文件将生成除::email之外的以下代码。需要在“::email”后或“::email”前添加
class AddDobToCustomer < ActiveRecord::Migration[5.2]
def change
add_column :customers, :dob, :date, after: :email
end
end
你也可以使用before column或after column将列添加到特定位置,如下所示:
rails generate migration add_dob_to_customer dob:date
迁移文件将生成除::email之外的以下代码。需要在“::email”后或“::email”前添加
class AddDobToCustomer < ActiveRecord::Migration[5.2]
def change
add_column :customers, :dob, :date, after: :email
end
end
有时,rails生成add_email_to_users email:string生成这样的迁移
class AddEmailToUsers < ActiveRecord::Migration[5.0]
def change
end
end
在这种情况下,你必须手动修改一个add_column:
class AddEmailToUsers < ActiveRecord::Migration[5.0]
def change
add_column :users, :email, :string
end
end
然后运行rake db:migrate