2013-10-29 40 views
0

我得到了一個很多領域的大表格。有多種select_tag字段:Rails:如何獲得被拒絕的提交表單的字段?

-(0..2).to_a.each do |id| 
    = select_tag('product[category_ids][]', options_from_collection_for_select(Category.all, :id, :name), :prompt=> '-- Select a Category --') 

問題:如果窗體時拒絕提交的新動作已經不記得是什麼select_tags以前選擇的值。

提交後每隔一個字段會重新出現(如:title,:description),但categories_id已丟失。

可能的解決方案:我們必須在options_from_collection_for_select方法中添加默認選擇的select_tag。如何獲得category_id的價值?我們如何訪問以前表單的字段?

options_from_collection_for_select(Category.ordered, :id, :name, category_id) 
+0

您是否嘗試過你的 「可能的解決方案」?它有用嗎?如果是這樣,這應該以Q&A格式發佈。 –

+0

這不完全是一個解決方案,因爲有一個未知變量 - 'category_id'。我的問題是:「我怎麼能得到那個未知的變量?」。 – fiction

+0

我會使用ajax並使用json或FormData提交表單。如果失敗,則使用該響應來突出顯示無效輸入(您永遠不會離開頁面,以便保留用戶輸入)。如果它成功返回位置標題中的url並使用'pushState'或'window.location'來重定向。表單仍然應該提交給沒有js的用戶 - 他們在失敗時不會看到原始值。 – firien

回答

0

在我的形式

@product.categories = [] 

@product.category_ids = [1,42,57] 

所以我增加了一個凌亂的if聲明:

-if @product.category_ids.count == 0 #create new product 
    -(0..2).to_a.each do |id| 
    = select_tag('product[category_ids][]', options_from_collection_for_select(Category.all, :id, :name), :prompt=> '-- Select a Category --') 
-else #edit old product, or fixing errors to previous submit 
    [email protected]_ids.each do |category_id| 
    = select_tag('product[category_ids][]', options_from_collection_for_select(Category.all, :id, :name, category_id), :prompt=> '-- Select a Category --') 
0

你可以在會話中存儲這些數據,如果它存在其加載到新的行動,並明確表示,從會議。

只要字段拒絕未記住的字段,就會加載到會話中並加載到新動作的選擇中。否則,當這個會話變量爲空時,什麼都不會加載。

希望這會有所幫助。

相關問題