Ruby on Rails アプリケーションに認証用の devise gem をインストールしており、次のようにデータベースの移行を実行しました。
rake db:migrate
このエラーが発生しました:
undefined method `reference' for #<ActiveRecord::ConnectionAdapters::TableDefinition:0x9322248>
これは少し不可解です。これをデバッグするにはどこに行けばよいですか?また、何が問題なのですか?
私が行った唯一の非標準的なことは、この前のコマンドでのテーブル名である「users」というテーブル名を付けたことです: rails generate devise users
また、routes.rb ファイルには次の新しいエントリがあります。
devise_for :users
おそらく問題は、データベース内の列が一致していないことと、認証パッケージがユーザーテーブルをどのようにすべきかを考えていることです。認証パッケージが列をどのように考えているかを確認するには、どこを見ればよいですか? そして、私が持っているユーザーテーブルの create-table コマンドがどこにあるかはどこにありますか? これはもともと scaffold コマンドで作成されたもので、システムに余計なものや役に立たないものをたくさん入れていました。
私の 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 コマンドを実行した後、このような不整合がどのように発生するのかわかりません。私が投稿した上記のファイルではない場合、どこから指示を受けますか?
ありがとう!