iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 4
0
自我挑戰組

rails 學習紀錄系列 第 4

[Day4]關於 index: true 跟 foreign_key: true (下)

  • 分享至 

  • twitterImage
  •  
class CreateStores < ActiveRecord::Migration[5.1]
  def change
    create_table :stores do |t|
      t.string :title
      t.string :address

      # 純用 integer
      t.integer :user_int_id

      # 用 integer 並且加上 index
      t.integer :user_int_index_id, index: true

      # 用 integer 並且加上 foreign_key
      t.integer :user_int_key_id, foreign_key: true

      # 純用 references
      t.references :user_ref

      # 用 references 並且加上 index
      t.references :user_ref_index, index: true

      # 用 references 並且加上 foreign_key
      t.references :user_ref_key, foreign_key: true

      t.timestamps
    end
  end
end

db/schema.rb 的結果如下:

  create_table "stores", force: :cascade do |t|
    t.string "title"
    t.string "address"

    t.integer "user_int_id"
    t.integer "user_int_index_id"
    t.integer "user_int_key_id"
    t.integer "user_ref_id"
    t.integer "user_ref_index_id"
    t.integer "user_ref_key_id"

    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false

    t.index ["user_int_index_id"], name: "index_stores_on_user_int_index_id"
    t.index ["user_ref_id"], name: "index_stores_on_user_ref_id"
    t.index ["user_ref_index_id"], name: "index_stores_on_user_ref_index_id"
    t.index ["user_ref_key_id"], name: "index_stores_on_user_ref_key_id"
  end

可以看得出來:

  1. references 的寫法最後也是產生 integer 欄位,但會自動補上 _id 名稱
    (看t.integer的部分)

  2. 在純用 integer 的寫法中,需要主動告知 index: true 才會幫忙加索引,用 forign_key 的方式不會。
    (看t.index的部分,只有user_int_index_id有,另外兩個都沒有)

  3. 用 references 的寫法,不管有沒有 index: true,都會自動幫你加上索引。
    (看t.index的部分 user_ref /user_ref_index /user_ref_key)


資料來源:
龍哥解答


上一篇
[Day3] 關於 index: true 和 foreign_key: true
下一篇
[Day 5 ] 關於Rspec 的簡單介紹
系列文
rails 學習紀錄14
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言