Ruby on rails 迁移DB Rails时出错
我正在尝试使用这个迁移,但是我不断得到错误,就像下面这些 这是我的迁移文件Ruby on rails 迁移DB Rails时出错,ruby-on-rails,database,dbmigrate,Ruby On Rails,Database,Dbmigrate,我正在尝试使用这个迁移,但是我不断得到错误,就像下面这些 这是我的迁移文件 class CreateEmployees < ActiveRecord::Migration def self.up create_table :employees do |t| t.string :name t.date :hiredate t.float :salary t.boolean :fulltime , :default =>
class CreateEmployees < ActiveRecord::Migration
def self.up
create_table :employees do |t|
t.string :name
t.date :hiredate
t.float :salary
t.boolean :fulltime , :default => true
t.integer :vacationdays
t.text :comments
end
end
def self.down
drop_table :employees
end
end
class CreateEmployeestrue
t、 整数:假期天数
t、 案文:评论
终止
终止
def自动关闭
下拉列表:员工
终止
终止
当我尝试执行rake db:migrate时,会出现以下错误:
==CreateEmployees:正在迁移================================================
--创建表格(:employees)rake中止!发生错误,此迁移和所有后续迁移已取消:
SQLite3::SQLException:表“employees”已存在:创建表
“雇员”(“id”整数主键自动递增不为空,“名称”
varchar(255),“雇佣”日期,“工资”浮动,“全职”布尔值
默认值为“t”,“vacationdays”整数,“comments”文本)
/Library/Ruby/Gems/2.0.0/Gems/sql
ite3-1.3.8/lib/sqlite3/database.rb:91:ininitialize'
/Library/Ruby/Gems/2.0.0/Gems/sqlite3-1.3.8/lib/sqlite3/database.rb:91:in
new'
/Library/Ruby/Gems/2.0.0/Gems/sqlite3-1.3.8/lib/sqlite3/database.rb:91:in
prepare'
/Library/Ruby/Gems/2.0.0/Gems/sqlite3-1.3.8/lib/sqlite3/database.rb:134:in
execute'
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.0.0/lib/active\u record/connection\u adapters/sqlite3\u adapter.rb:328:inblock in execute'
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.0.0/lib/active\u record/connection\u adapters/abstract\u adapter.rb:425:in
block in log'
/Library/Ruby/Gems/2.0.0/Gems/activesupport-4.0.0/lib/active\u support/notifications/instrumenter.rb:20:in
仪器'
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.0.0/lib/active\u record/connection\u adapters/abstract\u adapter.rb:420:in
log'
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.0.0/lib/active\u record/connection\u adapters/sqlite3\u adapter.rb:328:inexecute'
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.0.0/lib/active\u record/connection\u adapters/abstract/schema\u statements.rb:190:in
create_table'
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.0.0/lib/active\u record/migration.rb:625:in
方法中的块\u缺失'
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.0.0/lib/active\u record/migration.rb:597:in
用“时间”阻塞
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.0.0/lib/active\u record/migration.rb:597:in
用“时间”说“时间”
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.0.0/lib/active\u record/migration.rb:617:in
方法\u缺失'
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.0.0/lib/active\u record/migration.rb:383:in
method\u missing'/Users/YuriAguirre/Documents/Aptana Studio 3
Workspace/company/db/migrate/20130923140626\u create\u employees.rb:3:in
up'
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.0.0/lib/active\u record/migration.rb:534:in
up'
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.0.0/lib/active\u record/migration.rb:574:in
exec\u迁移'
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.0.0/lib/active\u record/migration.rb:555:in
迁移中的块(2个级别)
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.0.0/lib/active\u record/migration.rb:554:in
migrate中的块'
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.0.0/lib/active\u record/connection\u adapters/abstract/connection\u pool.rb:294:in
与_连接'
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.0.0/lib/active\u record/migration.rb:553:in
migrate'
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.0.0/lib/active\u record/migration.rb:709:in
migrate'
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.0.0/lib/active\u record/migration.rb:959:in
在事务中执行迁移时阻塞
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.0.0/lib/active\u record/migration.rb:1005:in
ddl_事务中的块'
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.0.0/lib/active\u record/connection\u adapters/abstract/database\u statements.rb:202:in
在事务中阻塞'
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.0.0/lib/active\u record/connection\u adapters/abstract/database\u statements.rb:210:in
在新交易中
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.0.0/lib/active\u record/connection\u adapters/abstract/database\u statements.rb:202:in
transaction'
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.0.0/lib/active_record/transactions.rb:209:intransaction'
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.0.0/lib/active\u record/migration.rb:1005:in
ddl\U交易'
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.0.0/lib/active\u record/migration.rb:958:in
在\u事务中执行\u迁移\u'
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.0.0/lib/active\u record/migration.rb:920:in
migrate中的块'
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.0.0/lib/active\u record/migration.rb:916:in
每个'
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.0.0/lib/active\u record/migration.rb:916:in
migrate'
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.0.0/lib/active\u record/migration.rb:764:in
up'
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.0.0/lib/active\u record/migration.rb:742:in
migrate'
/Library/Ruby/Gems/2.0.0/Gems/activerecord-4.0.0/lib/active\u record/railties/databases.rake:42:in
`“Tasks:TOP=>db:migrate”中的块(2个级别)(请参见
通过使用--trace运行任务完成完整跟踪
正如我在评论中所写,您收到该错误是因为:
SQLite3::SQLException: table "employees" already exists
这意味着数据库中已经有了该列。您可以通过以下几种方式解决此问题:
- 将迁移更改为修改而不是创建:
class CreateEmployees < ActiveRecord::Migration def self.up add_column :employees, :name, :string (...) end end def self.down remove_column :employees, :name end end
class CreateEmployees
class RemoveEmployees < ActiveRecord::Migration def change drop_table :employees end end
rake db:drop rake db:create rake db:migrate
rails db:rollback rails db:migrate