Model
我們會把這些東西放在Model
- 商業邏輯方法
- 資料驗證(寫入資料庫前)
- 資料表關聯
商業邏輯方法
簡短方法可用 scope 來寫
*小提醒:where 都放在 Model 寫,不要放 Controller
1 | scope :available, -> { where(deleted_at: nil) } |
預設方法:default_scope (設定就會套用在所有的搜尋中)
1 | default_scope { where(deleted_at: nil) } |
解除預設方法:unscope(:where)
1 | scope :available, -> { unscope(:where).where(deleted_at: nil) } |
資料驗證
針對寫入的資料做驗證,不符合就無法存入資料庫中
1 | validates :title, presence: true, |
資料表關聯
讓 table 與 table 之間產生方法來互相存取,並非真的有關聯
一對一
1 | # user.rb |
一對多
1 | # user.rb |
多對多
- 如果 has_many 的 table 與 has_one 的 table 重複,要使用 source 來指定foreign key
1 | # user.rb |
一旦定義了關聯,就會產出相關方法
以上述 user 來舉例
設定 has_many、has_one,會得到四個方法
而 belong_to,只會有上面兩個方法( articles、article= )
1 | 增加 article 跟 article= 方法 |
table欄位 增加、修改、刪除
專案做到後面一定會有欄位增減的問題
這時候 migration 就很好用
- 記得確認完欄位,要做
rails db:migrate
相關設定可以參考官方網站
1 | 終端機指令 |
1 | # db/migrate/xxxxxxx_add_delted_at_to_article |
小補充:index
使用 index 可以增加效率,但因為多了檢索欄位,會多佔一些空間
1 | 建立 model 時可以這樣設定 |
密碼加密
密碼相對其他資料機密且重要,所以我們會對密碼做雙重加密的動作
1 | private |