我有一个需要:email列的用户模型(我忘了在初始脚手架中添加该列).
我打开了迁移文件并添加t.string :email,做了rake db:migrate,得到了一个NoMethodError.然后我添加了这条线
add_column :users, :email, :string
Run Code Online (Sandbox Code Playgroud)
再次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
Run Code Online (Sandbox Code Playgroud)
Dyl*_*kow 545
如果您已经运行了原始迁移(在编辑之前),则需要生成新的迁移(rails generate migration add_email_to_users email:string将执行此操作).然后做一个add_column :users, email, string,它将运行新的迁移.
如果您尚未运行原始迁移,则只需编辑它,就像您尝试的那样.您的迁移代码几乎是完美的:您只需要rake db:migrate完全删除该行(该代码试图在创建表之前向表中添加列,并且您的表创建代码已经更新以包含add_column任何内容).
vin*_*odh 112
在rails控制台上使用此命令
rails generate migration add_fieldname_to_tablename fieldname:string
Run Code Online (Sandbox Code Playgroud)
和
rake db:migrate
Run Code Online (Sandbox Code Playgroud)
运行此迁移
Apo*_*wal 46
有时rails generate migration add_email_to_users email:string会产生这样的迁移
class AddEmailToUsers < ActiveRecord::Migration[5.0]
def change
end
end
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您必须手动执行以下add_column操作change:
class AddEmailToUsers < ActiveRecord::Migration[5.0]
def change
add_column :users, :email, :string
end
end
Run Code Online (Sandbox Code Playgroud)
然后运行 rake db:migrate
Nin*_*inz 23
你也可以
rake db:rollback
Run Code Online (Sandbox Code Playgroud)
如果您尚未向表中添加任何数据.然后通过向其添加电子邮件列来编辑迁移文件,然后调用
rake db:migrate
Run Code Online (Sandbox Code Playgroud)
如果您的系统中安装了rails 3.1,那么这将起作用.
更简单的方法是更改让迁移文件中的更改保持原样.使用
$rake db:migrate:redo
Run Code Online (Sandbox Code Playgroud)
这将回滚上次迁移并再次迁移它.
小智 18
要添加列,我只需要按照以下步骤操作:
rails generate migration add_fieldname_to_tablename fieldname:string
替代
rails generate migration addFieldnameToTablename
生成迁移后,编辑迁移并定义要添加的列所具有的所有属性.
注意:Rails中的表名始终为复数(以匹配DB约定).使用前面提到的步骤之一的示例 -
rails generate migration addEmailToUsers
rake db:migrate
要么
db/schema.rb在SQL查询中添加所需的列. 运行此命令: rake db:schema:load
警告/注意事项
请记住,运行会rake db:schema:load自动擦除表中的所有数据.
您还可以使用前列或后列将列添加到特定位置,例如:
rails generate migration add_dob_to_customer dob:date
Run Code Online (Sandbox Code Playgroud)
迁移文件将生成以下代码(除了::email 之后)。您需要在: :email 之后或之前添加: :email
class AddDobToCustomer < ActiveRecord::Migration[5.2]
def change
add_column :customers, :dob, :date, after: :email
end
end
Run Code Online (Sandbox Code Playgroud)
小智 5
您还可以在迁移中使用特殊的change_table方法来添加新列:
change_table(:users) do |t|
t.column :email, :string
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
388327 次 |
| 最近记录: |