iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 12
1
自我挑戰組

關於 Ruby on Rails 的那些事系列 第 12

Day 12 - Model 關聯性

昨天提到 MVC 三大主角,今天要講的就是其中一員 Model!
Model 可以與資料庫溝通,最主要的作用就是把使用者想要取得的資料或想要寫入資料翻譯給資料庫可以讀懂的語言。

資料庫中的資料表設計

一個專案會有一個資料庫,一個資料庫會有很多資料表,針對不同的主題去做區分。比方說做一個部落格網站,使用者會有一張資料表,紀錄名字、性別、生日、自我介紹。使用者可以寫文章,文章就是另一張資料表,紀錄文章名稱、分類、內容。

關聯性

資料表與資料表之間是可以互相產生連結的,例如剛剛提到一個使用者可以寫很多文章,所以我可以從某篇文章找到作者是誰,也可以知道某個作者寫了哪些文章。
以下三種是常見的關聯:

  1. 一對一:假設作者只能發一篇文章,而文章也只有一個作者

# user.rb
class User < ApplicationRecord
  has_one :article
end
# article.rb
class Article < ApplicationRecord
  belongs_to :user
end
  1. 一對多:一篇文章只會對應到一個分類,但一個分類會有很多文章

# category.rb
class Category < ApplicationRecord
  has_many :articles
end
# article.rb
class Article < ApplicationRecord
  belongs_to :user
  belongs_to :category
end
  1. 多對多:一個人有很多工作,同一個工作也由很多人共同完成
    這個情況較為複雜,所以會透過 join table 來存放兩者的關係

# user.rb
class User < ApplicationRecord
  has_one :article
  has_many :assignments
  has_many :works, through: :assignments 
end
# work.rb
class Work < ApplicationRecord
  has_many :assignments
  has_many :users, through: :assignments 
end
# assignment.rb
class Assignment < ApplicationRecord
  belongs_to :work
  belongs_to :user
end

學無止盡,每天都要進步一點點!


上一篇
Day 11 - MVC 大架構
下一篇
Day 13 - Controller 控制誰?
系列文
關於 Ruby on Rails 的那些事30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言