我有一个模型用户,我们将primary_key作为user_id而不是id,我知道我应该为primary_key使用id,但是客户希望我们应该使用user_id而不是id。
我有另一个表,我必须将该表与user_id
联系起来我正在为其他表添加这样的迁移:
t.references :user, index: true, foreign_key: true
但是当我运行迁移时,我得到一个与外键约束相关的错误,如:
ActiveRecord :: StatementInvalid:PG :: UndefinedColumn:ERROR:column" id"外键约束中引用的引用不存在 ALTER TABLE" user_devices"添加约束" fk_rails_e700a96826" FOREIGN KEY(" user_id") 参考"用户" (" ID&#34)
似乎rails默认尝试将其他表指向id列,但我在users表中有user_id。
那么如何添加外键约束,如:
ALTER TABLE "user_devices" ADD CONSTRAINT "fk_rails_e700a96826"
FOREIGN KEY ("user_id")
REFERENCES "users" ("user_id")
使用rails迁移?
答案 0 :(得分:7)
您可以像这样创建单独的迁移:
'connections' => array(
'sqlite' => array(
'driver' => 'sqlite',
'database' => __DIR__.'/../database/production.sqlite',
'prefix' => '',
),
'mysql' => array(
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'my_db',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
),
'pgsql' => array(
'driver' => 'pgsql',
'host' => 'localhost',
'database' => 'my_db',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
'prefix' => '',
'schema' => 'public',
),
'sqlsrv' => array(
'driver' => 'sqlsrv',
'host' => 'localhost',
'database' => 'my_db',
'username' => 'root',
'password' => '',
'prefix' => '',
),
),