基本觀念:
在 Rails MVC 的 M,並不是指資料庫或資料表。
慣例 - 資料表命名:
在 Rails 專案中,Model 的命名方式是大寫單數,而資料表預設為小寫複數,並且在兩個單字以上所組成時,又會使用底線隔開。
Scope 與類別方法:
在 Rails 專案中的商業邏輯會盡量放到 model 裡去,除了可增加程式碼的可讀性,也可以在各個地方重複使用。 在 Rails 的 Model 有提供一種 scope 的寫法可以讓你完成這件事:
module HAWB
class Record < ApplicationRecord
scope :can_create_exception, -> { where.not(shipment_type: :fd) }
scope :not_draft, -> { where(draft: false) }
end
end
上面這個範例,我們定義了兩個 scope,其實就是把要查詢的條件給包裝起來,並且另外取了一個容易記得名稱。
預設 Scope:
Rails 的 Model 還有提供 default_scope 的方法,可以幫所有的查詢都預設套上這個條件:
module HAWB
class Record < ApplicationRecord
default_scope { order('id DESC') }
scope :can_create_exception, -> { where.not(shipment_type: :fd) }
scope :not_draft, -> { where(draft: false) }
end
end
加上 default_scope
之後,不管你想不想,所有的查詢都會冠上 order
排序。