Rails動態表單的Default數量


#1

請問大大,我們目前公司用cocoon的gem做動態表單,不過碰上一個問題
使用者都要點"新增"的按鈕才能增加,我們老闆想要有像icook那樣預設就會有出現3個動態表單
然後刪除表單到最後一個就無法刪除,請問該怎麼設定可以有預設的數量呢?

這是我目前參考cocoon github上的寫法,可以正常新增表單

<%= link_to_add_association "新增調味料", f, :food %>

<%= f.fields_for :food do |fd| %>
  <%= render 'food_fields', :f => fd %>
<% end %>

#2

最近我們公司同事也有遇到,用 bootstrap modal (其實是 popup 彈跳視窗),首頁和說明頁需要:登入,註冊 … 的 modal 跳出,你會怎麼做?

結果他老兄就寫了四五個 model 甚至載入 recaptcha,隱藏起來,等待用的時候才顯示 …

anyway 這不是好的解法,如同你的『動態』表單一樣,你需要的不是 gem 而是手刻 ajax,ajax 沒有很困難,單純你要跨越那個點罷了:不要過度仰賴 gem 尤其其實你可以簡單做到時 … 而且過度濫用 gem 反而會造成你專案的風險:如果對方不更新 or 製造病毒或攻擊程式時?甚至是該 gem 就是一個入侵的弱點時?

漂亮的做法類似在 layout 內只有一個預設空的 modal,按下某個按鈕後,ajax 去取得 form / content 的 html,塞入該 model,顯示即可,中間流程取 ajax 時可以弄轉轉轉 loading 圖示,取得後還可以再加上 callback 如果需要的話 …

anyway 自己作業要自己做哩,我只能提示到這邊而已,去找一下類似 jQuery + AJAX + insert HTML,你應該就可以找到一大票的解法了唄,畫個圖理一下流程,拋棄 gem 從頭來,你才能成為自己的主人|||

對了順便說一下, RailsFun 在 youtube 的影片有講 ajax 甚至是 vue 的操作,真的不行就自己去看唄?


#3

沒用過這個 gem ,但是單純回答你

刪除表單到最後一個就無法刪除

callback 可以在 before-remove 時候插入一些檢查
ref. here

至於預設有3個動態表單,看起來應該是沒有設定可以調整
不過不知道能不能 render 3次同樣的東西?你可以試試看