2010-12-07 43 views
1

我有一個嵌套的表格,如選擇輔助值Rails的:失敗後,創建

<% f.fields_for :invoice_items do |builder| %> 
<%= link_to_remove_fields "remove", builder %> 
<%= builder.collection_select(:product_id, Product.all, :id, :name) %> 
<%= builder.text_field :quantity, :size => 4,%> 
<% end %> 

當我提交表單,它不通過它呈現驗證再次執行新的 操作。東西是選定的值:product_id不是 記住,但:數量是好的。我讀,我應該設置與選擇的 選項的值時,控制器的 實例變量,然後做一些事情,如:

<%= builder.collection_select(:product_id, Product.all, :id, :name, 
:selected => @selected_product) %> 

但事情是應用程序可以有很多:invoice_items,所以我 唐不知道如何選擇字段「記住」這些值。

謝謝。

+0

你看過這個例子(不完全一樣,但..):http://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html#method-i-collection_select。另外,你可以發表評論與生成的HTML(只有選擇)。我敢打賭,你對collection_select的使用是錯誤的。通過驗證時,它是否將所選產品的記錄保存在數據庫中? – 2010-12-07 10:27:17

+0

嗨,你可以顯示你的控制器代碼,請問?如果你的頁面有@invoice的許多表單(或者任何其他具有嵌套字段的對象),你如何處理請求? – Bohdan 2010-12-07 10:40:20

回答

0

這類問題通常與產品的id是一個整數有關,但與表單構建器比較的product_id是字符串。如果是這樣的問題,來自未美麗,但是,它-工程部門的解決辦法是撥打to_i:

builder.collection_select(builder.object.product_id.to_i, Product.all, :id, :name) 

我很樂意看到這樣做的更好的方式。

當調試選擇時,另一件經常麻煩的事情是,如果刷新頁面,firefox會在突出顯示的條目上留下一個選擇 - 它不會再次查詢HTML並選擇現在應該選擇的內容。這意味着如果你最初有錯誤的選擇屬性,然後更正代碼並刷新,你的瀏覽器實際上不會向你顯示改變。