mar*_*ion 7 ruby-on-rails devise ruby-on-rails-3 ruby-on-rails-3.1
这是我第一次安装Devise并运行时遇到的错误rake db:migrate:
== AddDeviseToUsers: migrating ===============================================
-- change_table(:users)
rake aborted!
An error has occurred, this and all later migrations canceled:
SQLite3::SQLException: duplicate column name: email: ALTER TABLE "users" ADD "email" varchar(255) DEFAULT '' NOT NULL
Run Code Online (Sandbox Code Playgroud)
鉴于这只是测试数据,我可以删除我的数据库中的那个列并重新运行它,但这似乎不是Railsy - 如果只是因为它将使我的登台服务器(唯一的其他服务器与我的应用程序与我的不同步localhost.
此外,如果与另一列发生冲突,该怎么办?
因此,User在运行迁移之前,这是我的表的模式,我该如何处理?迁移某种重命名的迁移?
# == Schema Information
#
# Table name: users
#
# id :integer not null, primary key
# email :string(255)
# f_name :string(255)
# l_name :string(255)
# username :string(255)
# role_id :integer
# picture :string(255)
# about_me :string(255)
# website :string(255)
# created_at :datetime
# updated_at :datetime
#
Run Code Online (Sandbox Code Playgroud)
Nao*_*den 17
在Devise生成的迁移文件中,更改该行
t.string :email, :null => false, :default => ""
Run Code Online (Sandbox Code Playgroud)
对于
t.change :email, :string, :null => false, :default => ""
Run Code Online (Sandbox Code Playgroud)
因此,迁移不会尝试创建新的电子邮件列,而是将现有的更改为Devise的规范.
尝试rake db:rollback然后再试一次。当您第一次执行此操作时,它添加了 id 列。以及为什么你要id :integer not null, primary key在 Rails 中添加它的自动功能。它应该看起来像这样:
class CreateProducts < ActiveRecord::Migration
def up
create_table :products do |t|
t.string :email
t.text :f_name
t.timestamps
end
end
def down
drop_table :products
end
end
Run Code Online (Sandbox Code Playgroud)
您可以在此处获取更多信息http://guides.rubyonrails.org/migrations.html
| 归档时间: |
|
| 查看次数: |
13509 次 |
| 最近记录: |