動態新增多筆資料寫入single model


#1

各位大大好,第一次在這邊發問請教前輩

動態新增欄位範例如下


目前需要做出動態新增多筆資料功能,讓使用者需要新增筆數,然後將內容key好
按下新增可將大量資料寫入至db內
model部分是單張,所以想請問一下有方法透過single model做新增嗎?
有在網路上查到可以使用nested_for,但目前model並不適合做一對多關聯
所以想請教各位大大能給新手小弟一些方向,非常感謝大家


#2

首先,我們 youtube 教學內有教你動態表單製法 … 你用 .delegate() 我剛看 jQuery 官方 doc 第一句就是

As of jQuery 3.0, .delegate() has been deprecated. 

類似 .on() / .live() 的鬼東西( 剛看完你的 code 想說動態表單如果那麼好寫該有多好 X"D,結果又是 live 系列 … ),anyway 學會動態 binding 物件的 event 唄 …(影片下面有人回時間軸)

再來,multi insert 對後期的 Rails 還滿好解的(對新手而言),因為丟個 Array 進去即可

不過前提是你會用 Ruby 語法去整理成 Array 唄 … 而不是只會 Rails 那套,再來你最後的一個問題

『目前model並不適合做一對多關聯』

其實有方便解啦,啥 gem 都不用,Rails 內建的:用 serialize 即可

https://apidock.com/rails/ActiveRecord/Base/serialize/class

用這關鍵字應該可以查到很多東西才是,該欄位要開成 text,然後預設是放 YAML,而 Rails 3.1 後可以放 JSON,其實就是一個方便的 adapter 而已,你也可以自己寫 getter / setter 來做到相同的事情,甚至放 Marshal 都可以(but RDBMS 有 binary 的問題…所以應該沒辦法直塞 Marshal …),anyway 設定該 text 欄位為 serialize 後就可以把 Array / Hash 之類的基本型別直接丟進去,下次拿出來會是原樣拿出來就是

okay,上面這些是『方便解』,但你必須知道使用這樣的方便解會有代價,類似無法做 JOIN / SUM / GROUP 之類的 SQL 處理,除非你另外做 index / cache column 之類的,畢竟你儲存的方式是 text 哩,但拆開成別的表也不一定是最佳解,這邊都要視需求而定就是 …

anyway 有問題再提出,但作業要自己做,練功要自己練哩,以上


#3

非常感謝JC大大的解惑
http://vicfriedman.github.io/blog/2015/07/18/create-multiple-objects-from-single-form-in-rails/
其實原本有參考上面這個做法,但發現實作出來會有create rollback問題
而且時好時壞,一直查不出問題,所以只好上來詢問大大有沒有更好的方法
JS部分也會一併一起學起來,會努力補齊
非常感謝JC大大的幫忙,給予方向很感激了,當然要好好自己練功了!!
如果有問題再來請教各位大大,感恩!!