我正在 Ruby on Rails 应用程序中安装设计 gem 以进行身份验证,并像这样运行数据库迁移:
rake db:migrate
并得到这个错误:
undefined method `reference' for #<ActiveRecord::ConnectionAdapters::TableDefinition:0x9322248>
这有点神秘。我应该去哪里调试这个问题可能是什么?
我做的唯一非标准的事情是给它表名“users”,这是我在前面的命令中的表名:rails generate devise users
另外,我的 routes.rb 文件有这个新条目:
devise_for :users
问题可能是我的数据库中的列不匹配以及 auth 包认为用户表应该是什么样的。我在哪里查看 auth 包认为列是什么样的?我在哪里可以找到我拥有的用户表的 create-table 命令在哪里。它最初是用脚手架命令制作的,它在我的系统中放置了一大堆额外和无用的东西。
我的 db/migrate/users/create_users 文件如下所示:
class CreateUsers < ActiveRecord::Migration
def self.up
create_table :users do |t|
t.timestamps
end
end
def self.down
drop_table :users
end
end
这是基本的,但我在数据库中的用户表有这些列:
+------------------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------+------------------+------+-----+---------+-------+
| uid | int(10) unsigned | NO | PRI | 0 | |
| name | varchar(60) | NO | UNI | | |
| pass | varchar(128) | NO | | | |
| mail | varchar(254) | YES | MUL | | |
| theme | varchar(255) | NO | | | |
| signature | varchar(255) | NO | | | |
| signature_format | varchar(255) | YES | | NULL | |
| created | int(11) | NO | MUL | 0 | |
| access | int(11) | NO | MUL | 0 | |
| login | int(11) | NO | | 0 | |
| status | tinyint(4) | NO | | 0 | |
| timezone | varchar(32) | YES | | NULL | |
| language | varchar(12) | NO | | | |
| picture | int(11) | NO | | 0 | |
| init | varchar(254) | YES | | | |
| data | longblob | YES | | NULL | |
+------------------+------------------+------+-----+---------+-------+
而且我不确定在运行 migrate 命令后如何存在这种不一致。如果不是我发布的上述文件,它从哪里获取指示?
谢谢!