2011-10-09 99 views
3

我有一個Ruby on Rails應用程序,它具有嵌套屬性的表單。這種形式允許動態添加字段與一些JavaScript。該表單還通過AJAX提交模糊處理。Rails動態表單字段和AJAX提交

除了一個以動態添加字段爲中心的問題之外,一切都很好。

當通過Javascript添加動態字段時,會爲它們分配唯一的ID。但是,表單字段的名稱和模式名稱顯然不匹配一旦字段被保存後軌道會生成的名稱。

由於AJAX表單提交,動態添加的字段會在每次更改表單時創建一個新的數據庫條目。

我需要找到一種方法來優雅地處理事實,我需要檢索軌道生成的表單,並在AJAX提交後修改/替換頁面上的一個 - 否則新字段將繼續複製!

你可以看到我的代碼:https://github.com/michaelward82/WeddingPlanner/tree/UI

(道歉,如果我的Rails代碼是不是乾淨的,這是我第一次真正嘗試在真正的軌道項目,我仍然在學習模式)

+0

有沒有你需要讓之前創建的父(通過您的AJAX請求)的子記錄創建一個原因嗎? – coreyward

+0

父級已創建。預算與用戶同時創建,屬於該用戶。通過預算顯示操作,我們使用嵌套字段將預算項目添加到預算中。 問題是,任何動態添加的預算項目都被視爲新的,直到用戶刷新頁面並獲取由rails生成的表單。 刷新頁面或避免使用AJAX並不像一個優雅的解決方案。 – michaelward82

+0

這聽起來像你需要'BudgetItems#new'來返回沒有佈局渲染的新對象,那麼你的JavaScript可以在頁面上替換該對象的HTML。 – coreyward

回答

1

我想你缺少的是belongs_to關聯中的:dependent => :delete_all參數。這使得Rails的刪除舊的預算項目時,新的一組保存:

# budget_item.rb 
belongs_to :budget, :dependent => :delete_all