既存のRails3.2アプリがあり、Postgresqlデータベースにセッションを保存したいと思います。Stackoverflowでこのチュートリアルを見つけ、DiegoPinoの指示に従いました。
ただし、rake db:migrate
ステップに到達すると、次のエラーが発生しました。
PG ::エラー:エラー:外部キー制約「sessions_session_id_fkey」は実装できません詳細:キー列「session_id」と「id」は互換性のないタイプです:文字可変と整数。
実行しようとしているSQLは次のとおりです。
CREATE TABLE "sessions" ("id" serial primary key,
"session_id" character varying(255) NOT NULL,
"data" text,
"created_at" timestamp NOT NULL,
"updated_at" timestamp NOT NULL,
FOREIGN KEY ("session_id") REFERENCES "sessions" ("id"))
そして、これが自動的に作成された移行です:
class AddSessionsTable < ActiveRecord::Migration
def change
create_table :sessions do |t|
t.string :session_id, :null => false
t.text :date
t.timestamps
end
add_index :sessions, :session_id
add_index :sessions, :updated_at
end
end
私にとって紛らわしいのは、移行で外部キー制約宣言が表示されないことです。では、生成されたSQLがテキストフィールドと整数フィールドをリンクしようとしているのはなぜですか?
更新1
config/initializers/session_store.rb
ケビンは私のファイルの内容を要求しました:
# Be sure to restart your server when you modify this file.
Calliope::Application.config.session_store :cookie_store, key: '_calliope_session'
# Use the database for sessions instead of the cookie-based default,
# which shouldn't be used to store highly confidential information
# (create the session table with "rails generate session_migration")
#Calliope::Application.config.session_store :active_record_store
rake db:migrate
一番下の行のコメントを外した後、コマンドを再実行しようと:active_record_store
しましたが、結果は変わりませんでした。
また、DevデータベースとTestデータベースのどちらにも既存のテーブルがありません。sessions