2011-09-29 80 views
0

我有一個(rails 3/jquery)應用程序,用戶遇到一個新的人形式。在表格中,他可以做的其中一件事就是在構建人員時添加地址。我想要添加和顯示地址(通過Ajax或頁面本身),但地址只應在人員保存後提交(如果用戶取消創建人員,地址也不應保存)。人員表格包含人員姓名字段和添加地址的按鈕。點擊添加地址後,彈出一個對話框輸入地址。隨着每個地址的添加,它會與表格一起顯示。如何向添加人員表單中的人員添加地址?

這樣做的最好方法是什麼?我目前在使用jquery輸入地址的人中填充div: <%= form_tag ... do%> <%= text_field_tag:person_name%> <%= link_to'Add address',nil,:id = > 'add_address_link',:遠程=>真%>
<%= submit_tag%> <%端%> $( '#add_address_link')上單擊(函數(){ $('#。地址')。append(...); });
我可以處理提交,並將地址元素讀入一系列隱藏字段(此處未顯示),或者使用ajax而不是直接的jQuery點擊處理程序,並將隱藏字段填充到erb中。不確定實現此目標的最佳方式是什麼?

感謝 阿南德

回答

1

導軌3支持與fields_for形式輔助嵌套形式。檢查出http://guides.rubyonrails.org/form_helpers.html#binding-a-form-to-an-object

你應該表現出的模型關聯你的問題,但我會假設你有:

class Person < ActiveRecord::Base 
    has_many :addresses 
end 

class Address < ActiveRecord::Base 
    belongs_to :person 
end 

現在,要動態地添加重複字段爲每個地址。雖然我不認爲ryanb的nested_form寶石是必要的,你應該看他railscast http://railscasts.com/episodes/197-nested-model-form-part-2

的railscast演示動態地添加一行到一個表,其中每一行都是使用fields_for

嵌套形式有一個伴侶項目在github上,包括代碼來做到這一點。

最後,你想調整ryanb的代碼來使用隱藏的字段,而不是錶行。我其實正在做這件事。

另一種選擇是重構您的表單工作流程。我有另一個用例,這聽起來更像你所描述的,對我來說最簡單的事情是,使用相同的_form部分Person,只顯示子對象(在你的案例中的地址),如果有的話。當然,在「新」動作中,沒有(除非你在Person回調中做了某些事情)。然後,在Person「創建」操作中,而不是重定向到Person索引頁面(典型),重定向到edit_person_path。然後,您可以使用remote/ajax向該人員添加地址,因爲該人員將存在。

0

我假設你有一個單獨的模型 - 地址。在這種情況下,只需將用於創建新用戶的參數傳遞給地址控制器,並在地址控制器的create操作中,僅當存在具有參數的人員(如果Person.find成功)時才調用@address.save

+0

我第一次創建地址時,該人還不存在。我將如何看到頁面上的第一個地址,同時添加更多地址(當人員尚未保存時)? – Anand

1

你的數據庫是什麼樣的?如果人員和地址是單獨的表格,我會推薦使用Ryanb的nested_form gem。 gem使用jQuery,並且使添加動態嵌套表單變得非常簡單和快速。寶石支持has_many關係,所以你可以允許一個人擁有多個地址。

https://github.com/ryanb/nested_form

相關問題