

railsでmigrationを行ってもschema.rbに外部キーが作られた形跡が見られません。

＊前提  
現在railsでTwitterライクなアプリケーションを作っておりまして、ユーザーは複数の投稿をするという機能を実装しています。

＊分からない箇所  
migrationファイルで外部キーの設定をしてもschema.rbに反映されていないことに詰まっています。  
本来ならschema.rbの一番下に外部キー一覧が表示されると思うのですが、私のファイルはされていません。

＊対象のファイル  
db/migration/create_users.rb

[code]

    class CreateUsers < ActiveRecord::Migration[5.2]
      def change
        create_table :users do |t|
          t.string :name
          t.string :email
          t.integer :age
    
          t.timestamps
        end
      end
    end
    
    
[/code]

db/migration/create_posts.rb

[code]

    class CreatePosts < ActiveRecord::Migration[5.2]
      def change
        create_table :posts do |t|
          t.text :content, null: false
          t.references :user, foreign_key: true
          t.string :image, null: false
    
          t.timestamps
        end
        add_index :posts, [:user_id, :created_at]
      end
    end
    
[/code]

db/schema.rb

[code]

    ActiveRecord::Schema.define(version: 2019_08_17_020505) do
    
      create_table "posts", force: :cascade do |t|
        t.text "content", null: false
        t.integer "user_id", null: false
        t.string "image"
        t.datetime "created_at", null: false
        t.datetime "updated_at", null: false
        t.index ["user_id", "created_at"], name: "index_posts_on_user_id_and_created_at"
        t.index ["user_id"], name: "index_posts_on_user_id"
      end
    
      create_table "users", force: :cascade do |t|
        t.string "name", null: false
        t.string "email", null: false
        t.datetime "created_at", null: false
        t.datetime "updated_at", null: false
        t.string "password_digest", null: false
        t.string "intro", null: false
        t.boolean "admin", default: false
        t.string "image"
      end
    
    end
    
    
[/code]

＊試したこと  
追加で以下のようなmigrationファイルを作成してmigrateしましたが、結果は変わりませんでした。

[code]

    class AddUserRefToPost < ActiveRecord::Migration[5.2]
      def change
       add_foreign_key :posts, :users
      end
    end
    
[/code]

＊環境  
rails 5.2

以上、もし分かる方いらっしゃいましたら、ご回答よろしくお願いします。


CC BY-SA 4.0
2019-08-19T22:49:27.613
57466
2021-01-11T22:00:15.247
35372
question
ruby-on-rails ruby
railsでmigrationを行っても外部キーが追加されない


実際にはちゃんと外部キーが貼られていると思います。

データベースはsqliteで試してみたのですが、以下の手順で確認できました。

[code]

    $ sqlite3 db/development.sqlite3
    sqlite> .schema
    ...
    CREATE TABLE IF NOT EXISTS "posts" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "content" text NOT NULL, "user_id" integer, "image" varchar NOT NULL, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL, CONSTRAINT "fk_rails_5b5ddfd518"
    FOREIGN KEY ("user_id")
      REFERENCES "users" ("id")
    );
    ...
    
[/code]

# 追記

github見てると同様のissueがありました。  
<https://github.com/rails/rails/issues/35207>

コメントを読んでる限りでは、rails6で解消されるようですね。


CC BY-SA 4.0
2019-08-22T01:56:49.747
57524
2019-09-03T01:18:18.303
2019-09-03T01:18:18.303
9608
9608
57466
answer