私はRails 5とPostgreSQL 9.5を使用しています。テーブル内に一意のインデックスを作成するにはどうすればよいですか?私は他のテーブルへの参照である2つの列から一意のインデックスを作成したいと思います。だから私はRails create table migration内でユニークなインデックスを作成するにはどうすればよいですか?
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
を試してみましたが、私はエラーに
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'
を取得していcreate table文の中に一意のインデックスを作成するための正しい方法は何ですか?あなたの移行がそのようにする必要がありますので
あなたは 'user_id'列がuser_notifications'テーブル'に固執していますか? 'UserNotification.column_names'で確認してください – Pavan
私はあなたの質問を理解していません。私はこの "t.references:users、index:true、on_delete::cascade"を "create table"の直下に置いていますので、 "user_id"カラムを作成しないでください。 – Dave
上記の移行を実行すると失敗し、user_notificationsテーブルは作成されません。 "create_table(:user_notifications)"の後に "rake aborted!StandardError:エラーが発生しました。これ以降のすべての移行はキャンセルされました:"と、上記のエラーが続きます。 – Dave