Ruby on rails 尝试将Rails设置为在Postgresql数据库中存储会话
我有一个现有的Rails 3.2应用程序,我想将会话存储在Postgresql数据库中。我在Stackoverflow上找到了,并按照迭戈·皮诺的指示行事 但是,当我进入Ruby on rails 尝试将Rails设置为在Postgresql数据库中存储会话,ruby-on-rails,postgresql,activerecord,ruby-on-rails-3.2,Ruby On Rails,Postgresql,Activerecord,Ruby On Rails 3.2,我有一个现有的Rails 3.2应用程序,我想将会话存储在Postgresql数据库中。我在Stackoverflow上找到了,并按照迭戈·皮诺的指示行事 但是,当我进入rakedb:migrate步骤时,我得到了以下错误: PG::错误:错误:外键约束“sessions\u session\u id\u fkey”无法实现详细信息:键列“session\u id”和“id”的类型不兼容:字符变化和整数 下面是它试图执行的SQL: CREATE TABLE "sessions" ("id" se
rakedb:migrate
步骤时,我得到了以下错误:
PG::错误:错误:外键约束“sessions\u session\u id\u fkey”无法实现详细信息:键列“session\u 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
在取消底部的:active\u record\u store
行的注释后,我尝试重新运行rake db:migrate
命令,但这并没有改变结果
在我的开发或测试数据库中,我也没有一个现有的会话表。查看生成的SQL,这跳出来:
FOREIGN KEY ("session_id") REFERENCES "sessions" ("id"))
您的表名为sessions
,但它引用的是另一个名为sessions
的表。出于某种原因,它表示此表中的session\u id
列是名为sessions
的表中id
列的外键
因此,很明显,它不能将会话表中的session\u id
列作为同一表中id
列的外键,因为错误告诉您:
Key columns "session_id" and "id" are of incompatible types: character varying and integer.
根据以下文件:
由活动记录类支持的会话存储。提供了一个默认类,但任何对象都可以使用文本会话id和数据属性输入到活动记录会话类
以下是该页面的链接:
你能发布你的
/config/initializers/session_store.rb
文件的内容吗?我用安德鲁的建议检查了图书馆的文档,下面是我问题的根源:
SchemaPlus增加了对外键约束的支持。事实上,对于使用后缀_id命名列以指示其为外键的常见约定,SchemaPlus会自动定义相应的约束
谢天谢地,这种行为可以通过使用
:references=>nil
设置在迁移中被覆盖。查看以获取更多信息。您是否有自动添加外键的gems?请发布/config/initializers/session_store.rb
我正在使用schema_plus,但我不知道它是否自动添加外键。我现在来查一查,安德鲁是对的。问题是我使用的是schema_plus,如果字段以“_id”结尾,它会自动尝试将其作为外键。谢天谢地,schema_plus还可以覆盖此行为。我知道这只是一个输入错误,但您可能应该在迁移到t.text:data
的AddSessionTable
中更新t.text:date
。只是一个观察。谢谢凯文,我用那个文件的内容更新了我上面的问题。我已经有了“会话”控制器和视图,但没有模型。我在前面创建了这些,以帮助管理会话。这些文件会导致这些问题吗?感谢Kevin的所有见解,但它最终成为我使用的schema_plus库的一个功能。
Key columns "session_id" and "id" are of incompatible types: character varying and integer.