2009-01-16 24 views
1

到目前爲止,我還沒有找到能夠讓表單與兩個具有一對多關係的模型進行交互的解決方案。比如說,客戶有很多項目。可降解的多種模式的可重用方式Rails中的表單中的多個模型

目前,我已經實現了使用Javascript的解決方案,使用戶能夠添加/刪除行到項目列表。讓我們保持簡單,我們在這裏創建新記錄。

爲了改善這是可降解的,我改爲創建了一個'添加項目'按鈕來提交一個不同的值,以便在我的創建操作中,我能夠捕獲新的屬性並添加一個新的項目客戶對象。

但是,由於項目是新的,沒有ID,我沒有辦法刪除特定的項目。我想過使用索引,並添加後按鈕/鏈接來刪除,但這種做法使一切雜亂,我不能使用我的部分集合。所以我覺得這是一個黑客;有更好的選擇嗎?

+0

我一直在努力,所以我很想看看有沒有人有解決方案。看起來未來版本中的東西可能會變得更好(請參閱http://tr.im/99v7),但就我而言,嵌套模型表單是Rails的一個弱點。 – maxhawkins 2009-01-17 22:03:22

+0

這看起來像我們將需要的!好找! – Jaryl 2009-01-18 03:52:11

回答

1

您想使用accepts_nested_attributes_for。 Railscasts插曲henrikloevborg提到涵蓋了一種被accept_nested_attributes_for廢棄的這種事情的方法。

您可以在不使用accept_nested_attributes_for的情況下執行此操作。如果你不想升級到Rails 2.3,可能有必要。

在你的javascript中刪除一個項目,你應該添加一個隱藏的字段到名爲_delete的值爲true的窗體。然後在你的控制器中。忽略_delete字段的任何新記錄,並銷燬任何現有的記錄。

所有這一切內置於accept_nested_attributes_for周圍

播放與在complex-forms-exmample GitHub的庫中的代碼。它本質上來自Railscast#75的代碼,更新爲使用更新的功能,accepted_nested_attributes_for。

您會注意到它不使用RJS來完成記錄的動態添加/刪除。同時比較您在提交時創建的內容,而不是在遠程調用期間創建的內容。項目的自動添加/刪除操作使用content_for標籤處理,以創建存儲在javascript函數中的模板,並使用Prototype庫修改隱藏字段,其中,accept_nested_attributes_for用於銷燬要刪除的對象。

1

railscasts episode #75是關於這個,如果我理解你的問題的權利。

我相信他創建的項目,然後標記爲刪除,如果用戶感到遺憾創建它們。

imo這是處理問題的最佳方法,並且有建議來處理驗證。

+0

我已經看到了,但它使用RJS來添加/刪除項目。 – Jaryl 2009-01-16 18:48:37