封裝、繼承、多型為物件導向三大基礎。
此三者具有次序性,沒有封裝就不可能有繼承 、沒有繼承就不可能有多型。
封裝 (encapsulation) 的目的是將 Class 裡的屬性用 private 隱藏,只能透過public的方法存取資料。
(隱藏程式細節,避免直接處理造成的困擾。使開發與維護更容易)
繼承 (Inheritance) 的目的,是要達到「程式碼再用」(Code Rause) 或「介面再用」。
透過繼承,可以適當的切割類別,並在衍生類別中重複使用、擴充和修改基底類別中定義的行
»
由於訂單流程某些地方是不可逆的。
為避免訂單流程出現不合理狀態,使用狀態機透過 event 方式使 code 更簡潔明瞭。
»
Transaction (交易) 保證所有資料的操作都只有在成功的情況下才會寫入到資料庫。
最著名的例子也就是銀行的帳戶交易。
只有在帳戶提領金額及存入帳戶這兩個動作都成功的情況下才會將這筆操作寫入 (commit) 資料庫,
否則在其中一個動作因為某些原因失敗的話就會放棄所有已做的操作將資料回復 (rollback) 到交易前的狀態。
»
redirect_to 通常使用在使用者要跳轉至不同頁面時,會執行指定頁面的controller action。
render 用於顯示處理完的結果,例如表單填寫不完全而重回填寫頁面。
因使用者第一次送出表單時就已儲存模板,所以 render 同一模板會保留使用者剛剛送出的表單資料,不用全部重打。
補充 : 一個 Action 中只能有一個 render 或一個 redirect_to。不然你會得到一個 DoubleRenderError 例外錯誤。
»
建立物件 (Creating an Object)
before_validation
after_validation
before_save
after_save
before_create
around_create
after_create
更新物件 (Updating an Object)
before_validation
after_validation
before_save
after_save
before_update
around_update
after_update
»
若 board has_many posts,新造物件宣告方式是:
@post = @boards.posts.build
那 book has_one author,要怎麼宣告?
二種方式皆可
@author = @book.author.build
或
@author = @book.build_author
»