惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

U
Unit 42
罗磊的独立博客
博客园 - 聂微东
T
The Blog of Author Tim Ferriss
博客园 - 司徒正美
Stack Overflow Blog
Stack Overflow Blog
F
Fortinet All Blogs
A
About on SuperTechFans
腾讯CDC
Apple Machine Learning Research
Apple Machine Learning Research
B
Blog RSS Feed
IT之家
IT之家
V
Visual Studio Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
宝玉的分享
宝玉的分享
C
Check Point Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Vercel News
Vercel News
爱范儿
爱范儿
Microsoft Security Blog
Microsoft Security Blog
月光博客
月光博客
T
Tailwind CSS Blog
The Cloudflare Blog
Hugging Face - Blog
Hugging Face - Blog

Nic Lin's Blog

謝明真 - 高效領導力的課後筆記 NFT 開發實戰!基礎智能合約入門 (3) NFT 開發實戰!基礎智能合約入門 (2) NFT 開發實戰!基礎智能合約入門 (1) 如何自我檢測 log4j CVE 漏洞 Rails 如何在資料寫入時記錄來源 IP 位置 如何經營工程師 Youtube 頻道 - Part 8 營收篇 如何經營工程師 Youtube 頻道 - Part 7 酸民文化篇 如何經營工程師 Youtube 頻道 - Part 5 設備器材篇 如何經營工程師 Youtube 頻道 - Part 4 後製剪輯篇 如何經營工程師 Youtube 頻道 - Part 3 文案企劃篇 如何經營工程師 Youtube 頻道 - Part 2 設備器材篇 如何經營工程師 Youtube 頻道 - Part 1 制訂頻道方向篇 如何經營工程師 Youtube 頻道 - Part 0 Rails 中避免 race condition 的最佳實踐(二) Rails 中避免 race condition 的最佳實踐(一) 10 分鐘整合 google sheet 做自動化開發功能週報 經營 Side Project 300 天所帶來的收穫及挑戰 我的 Youtube 影片製作流程 API 設計時必須注意的 HTTP header 底線問題 如何提升你的程式可讀性之實務技巧(三) 如何提升你的程式可讀性之實務技巧(二) 如何提升你的程式可讀性之實務技巧(一) Ruby 中使用 freeze 優化效能的時機 避免 React 中的 useEffect 無限 render 在 Rails 內輕量使用 Vue Component 的最佳實踐 如何在區域網路用 Docker 架設有 SSL 的 Gitlab 從被問到問人,那些我常問的面試問題 [Rails] 如何漂亮寫出可維護的 query (Maintainable Rails Query) 在已知長度情況下優化 slice 的性能
如何讓兩個資料表建立關聯
Nic Lin · 2016-01-06 · via Nic Lin's Blog

如何讓兩個資料表建立關聯

想法

假設我們擁有兩個資料表,一個是商品分類資料表,一個則是商品管理資料表,而該如何將這兩個資料表在Rails上建立關聯?

一個分類裡面可以查詢到很多商品 -> 一對多 一個商品只有對應到一個分類 -> 一對一

實際操作

首先,先將兩個資料表建立,我們在終端機中輸入以下

rails g model category name:string position:integer

這個指令會建立catagory的model,並且有一個name的欄位型態為字串和position欄位型態為整數。

接下來我們在建立第二個資料表,輸入以下

rails g model item description:integer price:integer

這個指令會建立item的model,並且有一個description的欄位型態為整數和price欄位型態為整數。

在實作的時候輸入以上兩行指令只會建立model,並聰明的在db裡面建立兩個migrate檔案,但真正的資料庫表還沒有建立。

所以我們還要輸入 rake db:migrate 讓資料庫表建立起來。

這樣Rails會將migrate的檔案執行,建立出兩個我們剛才輸入的資料庫表

資料庫表兩個是建立起來了,但還沒將他們兩個之間的關聯做出來,所以我們繼續看下去

將原先的

class Category < ActiveRecord::Base
end

改為

class Category < ActiveRecord::Base
has_many :items
end

因為一個category可以有很多的items,也就是我們在一開始提到的想法,分類對應多項商品。

再來將

class Item < ActiveRecord::Base
end

改為

class Item < ActiveRecord::Base
belongs_to :category
end

因為item對應到一個category,一個商品只會被分到一種分類。

但是在兩個實體的資料表上還沒有建立關聯,因為item裡面並沒有category_id的欄位

所以我們回到終端機輸入

rails g migration add_category_id_to_items

這裡的migration雖沒有硬性規定命名方式,但是為了之後的維護跟可讀性,慣性必須打上淺顯易懂且具有意義的snake_name命名方式

接著到migrate檔案裡面,應該看到我們剛剛建立的檔案,名稱前面會是一些數字,我們需要修改它。

原先

class AddCategoryIdToItems < ActiveRecord::Migration
    def change
    end
end

改為

class AddCategoryIdToItems < ActiveRecord::Migration
    def change
    add_colums :items, :category_id, :integer
    end
end

這樣就建立起兩個資料表彼此的關聯了。 建立完成一定要讓他跑db:migrtae跟server restart,否則會吃不到更新的檔案喔!

簡單的關聯先筆記到這邊 之後我們在做多型關聯的筆記吧XD