iT邦幫忙

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

rails 學習紀錄系列 第 1

[Day1] 關於我誤解Model的那些事

前言:

目前正在五倍紅寶石學習Ruby on Rails的課程,希望能將上課所學整理出屬於自己的筆記,透過文章整理思緒。因此文章內會有許多部分是參考龍哥的教材。


誤解1

在還沒上課之前,我一直以為在兩個Model上打上Model 所提供方法,他們的資料庫就能互相調資料了。

但其實不是。
Model 所提供的方法是讓Model之間建立連結,不是資料表之間。

Rails 裡所謂的關係,是指在 Model 層級的關係,主要是透過 Model 所提供的一些方法(例如 has_one、has_many 或 belongs_to)搭配 Rails 的資料表慣例設定主鍵(Primary Key)及外部鍵(Foreign Key),讓這些資料表串在一起。

當User和store之間要建立好關聯,除了要在Model內設定方法外,還在要Store的資料表裡建立user_id的欄位。

  • user_id 這個欄位的型態是數字,主要的用途是用來對應到 User Model 的 id 欄位,又稱它叫外部鍵(Foreign Key)。
  • 這個欄位要叫什麼名字都可以,但在 Rails 裡的慣例,是{model_name}_id
  • 「要被對到的那個 Model 的名字(的單數小寫)」加上 _id。

因為Model是翻譯員,我們透過Model去跟資料庫要資料。
建立好關係後,要去要資料的話。
Model的User 會去問 Model的Store ,這個時候Store去找他的資料表裡有沒有user_id是user的。


誤解2

一個 Model 就一定會對到一個資料表

其實有有三種情況。

  • Model 和 Table都有
  • 有Table,沒有Model (HABTM的做法 就是這種)

HABTM(has_and_belongs_to_many),不需要另外新增第三方 Model 即可完成多對多關連。注意,我是說「不需要第三方 Model」,不是「不需要第三方資料表」,畢竟還是要有一個資料表存放雙方的資訊,只是這個資料表因為不重要也不會存取它,所以可以不需要 Model 對應。

  • 有Model,沒有Table

下一篇
[Day2] 關於PORO(Plain Old Ruby Object)
系列文
rails 學習紀錄14

尚未有邦友留言

立即登入留言