Dav*_*ave 4 migration postgresql rake ruby-on-rails ruby-on-rails-5
我正在使用Rails 5和PostgreSQL 9.5.如何在表格中创建唯一索引?我想从两列中创建唯一索引,这两列本身就是对其他表的引用.所以我试过了
class CreateUserNotificationsTable < ActiveRecord::Migration[5.0]
def change
create_table :user_notifications do |t|
t.references :users, index: true, on_delete: :cascade
t.references :crypto_currencies, index: true, on_delete: :cascade
t.integer "price", null: false
t.boolean "buy", null: false
t.index [:user_id, :crypto_currency_id], unique: true
end
end
end
Run Code Online (Sandbox Code Playgroud)
但是我收到了错误
PG::UndefinedColumn: ERROR: column "user_id" does not exist
: CREATE UNIQUE INDEX "index_user_notifications_on_user_id_and_crypto_currency_id" ON "user_notifications" ("user_id", "crypto_currency_id")
/Users/davea/.rvm/gems/ruby-2.4.0/gems/activerecord-5.0.4/lib/active_record/connection_adapters/postgresql/database_statements.rb:98:in `async_exec'
/Users/davea/.rvm/gems/ruby-2.4.0/gems/activerecord-5.0.4/lib/active_record/connection_adapters/postgresql/database_statements.rb:98:in `block in execute'
/Users/davea/.rvm/gems/ruby-2.4.0/gems/activerecord-5.0.4/lib/active_record/connection_adapters/abstract_adapter.rb:590:in `block in log'
Run Code Online (Sandbox Code Playgroud)
在create table语句中创建唯一索引的正确方法是什么?
Pav*_*van 10
PG :: UndefinedColumn:错误:列"user_id"不存在
问题是t.references :users创建一个名为users_idnot 的列user_id,因此无法创建索引,t.index [:user_id, :crypto_currency_id], unique: true因为user_id未创建导致该错误的列.
解:
只需将其更改为t.references :user.同样t.references :crypto_currencies也是如此.
class CreateUserNotificationsTable < ActiveRecord::Migration[5.0]
def change
create_table :user_notifications do |t|
t.references :user, index: true, on_delete: :cascade
t.references :crypto_currency, index: true, on_delete: :cascade
t.integer "price", null: false
t.boolean "buy", null: false
t.index [:user_id, :crypto_currency_id], unique: true
end
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2453 次 |
| 最近记录: |