如果表單送出要建立關聯的model,可以參考這一篇文章。這一篇主要是延伸Nested Form的用法,但前面的基本概念還是會稍微帶一下。
Model 使用情境:
現在Model共有母訂單、子訂單、子訂單發票。當我們在買東西的時候會成立一張訂單、子訂單、還有子訂單發票,會需要子訂單是因為訂單有可能因為某些原因需要拆單。例如:A書存貨只有2個但買家買3個,這時就要拆單另外送,還有幾種狀況是書泡水等意外的情況需要處理,這也就是子訂單為何要出現的原因,當然一張子訂單就對應一張發票(不過後來公司把子訂單發票的Model砍掉了)。
母訂單、子訂單、子訂單編號分別對應:MainOrder, SubOrder, SubOrderInvoice。先說一下MainOrder, SubOrder之間是一對多,SubOrder, SubOrderInvoice之間是一對一。在model層的話會這樣做:
Controller的部分:
View會這樣做:
好那以上是介紹正規的用法。那這邊又有另外一個情境是拆單。子訂單底下除了子訂單發票外,還有子訂單項目(Sub_order_items),這一欄放的就是商品。假設買家買了3本A書、2把B尺、1條C藥膏,那成立訂單的時候就會創一筆母訂單、子訂單、子訂單發票,以及3筆子訂單項目。
問題來了:
- 若我們要成立新的訂單,我們怎麼會知道客人要創建多少子訂單項目(要買多少商品)。
- 若要實現拆單功能,沒有辦法預先知道哪一筆子訂單項目要歸在哪邊的子訂單。況且!況且!若3本A書,在拆成2單的狀況下,2本歸在A單、1本歸在B單的話真的很麻煩。但其實這種問題就算不用太高級的解法還是可以解
以下會用情境1舉例說明
首先新增訂單的params為:
然後先介紹假設在新增頁面的Controller建立關聯資料表
對應的畫面這樣寫:
原始碼變為:
所以雖然表面上是form裡面有form的狀況,實際上simple_form把html name_attribute作延伸而已。知道概念之後,壞壞因子又出現了。我們既然要動態的產生,用Javascript就好了。
傳進controller參數成功:
這些在畫面裡面的東西成功傳出去了
天馬行空的PD造就更強大的工程師。後來送表單產生hidden模板的做法被改掉了,雖然這方法很方便但易讀性不好,但產生動態name_attribute的概念依舊存在。
參考資料:
Nested Form:[連結]