Rails 跟着 Ruby on Rails Tutorial 这本书中的一个问题

rails_on_ll · 2016年04月02日 · 最后由 rails_on_ll 回复于 2016年04月03日 · 2254 次阅读

这段时间一直跟着《Ruby on Rails Tutorial》这本书进行学习,学到第十章(账户的激活和验证)。 当我像数据库(用的 mysql)中添加需要的字段,即运行以下命令:

rails generate migration add_activation_to_users  activation_digest:string activated:boolean activated_at:datetime

即向 users 表中天骄后面这三个属性。 然后进行数据库的迁移操作,即

bundle exec rake db:migrate

但是遇到下面的问题:

== 20160402091205 AddActivationToUsers: migrating =============================
-- add_column(:users, :activation_digest, :string)
rake aborted!
StandardError: An error has occurred, all later migrations canceled:

Mysql2::Error: Duplicate column name 'activation_digest': ALTER TABLE `users` ADD `activation_digest` varchar(255)
/home/ll/.rvm/gems/ruby-2.2.1/gems/mysql2-0.4.3/lib/mysql2/client.rb:107:in `_query'
/home/ll/.rvm/gems/ruby-2.2.1/gems/mysql2-0.4.3/lib/mysql2/client.rb:107:in `block in query'
/home/ll/.rvm/gems/ruby-2.2.1/gems/mysql2-0.4.3/lib/mysql2/client.rb:106:in `handle_interrupt'
/home/ll/.rvm/gems/ruby-2.2.1/gems/mysql2-0.4.3/lib/mysql2/client.rb:106:in `query'
/home/ll/.rvm/gems/ruby-2.2.1/gems/activerecord-4.2.5.2/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:305:in `block in execute'
/home/ll/.rvm/gems/ruby-2.2.1/gems/activerecord-4.2.5.2/lib/active_record/connection_adapters/abstract_adapter.rb:472:in `block in log'

看了下,是数据库有重复的列名,可是并没有啊,而且我完全是一步一步照着书上的教程做的。 请问群上的同学有遇到这样的问题的吗?

肯定有已经存在的 column 呀,你这样的问题没人能帮你解决,就是重复了,是在不行 db:drop 以后重来吧。

好好检查,一定是哪里重复了

rails c, 随便 new 一个用户就知道有没有了

#1 楼 @huacnlee 还是没有仔细查看啊,刚才看了一下 mysql 中 users 中的表结构,确实已经存在了 activation_digest 这一列,恩,现在我把这一列删除,然后在运行这个命令就行了。奇怪啊,我前面在这个表中也没有加过这一列啊,anyway,thank you very much huacnlee

需要 登录 后方可回复, 如果你还没有账号请 注册新账号