2010-11-18 42 views
2

的多個對象這是希望爲Rails行家扣籃:梁2:使用的form_for構建形成覆蓋同一類

我有一個應該遍歷一組LineItems和收集表格每個信息。我試圖讓form_forfields_for創建正確的字段名和參數給我控制器params散列,像

params[:line_items] = { <line_item.id> => { :rma_reason => "some string", :rma_qty => 2 } } 

我所擁有的是:

<% form_for(@object) do |rma_form| %> 
    <% @order.line_items.each do |item| %> 
    .... 
    <% fields_for item do |item_f| %> 
     <%= item_f.text_area :rma_reason %> 
     <%= item_f.text_field :rma_qty, :value => item.quantity, :size=>3 %> 
    <% end %> 
    .... 
    <% end %> 
<% end %> 

並將所得HTML的樣子(你所期望的,我猜):

<textarea id="line_item_id" name="line_item[id]"></textarea> 
<input id="line_item_rma_qty" name="line_item[rma_qty]" size="3" type="text" value="1" /> 

然而什麼,我試圖讓(和faili除了回到專門的HTML標籤以外尋找任何解決方案)是由line_item.id索引的字段名稱,例如, line_item [1928] [rma_qty]等。這將允許我的控制器遍歷每個line_item並用給定的參數更新它。

  • ...也許一個純粹的REST UI,形式應與的LineItem一個實例,以及標準的form_for會工作 - 但用戶應該能夠一次與一個表單提交的所有更改。可能嗎?

回答

0

的fields_for需要被調用的主要形式幫手,魔法[]個字符串參數,並指明實例應在[] s內插入一個參數

<% rma_form.fields_for "line_item[]", item do |item_f| %> 

所以現在我的標籤看起來是像

<input id="return_authorization_line_item_1070870205_rma_qty" name="return_authorization[line_item][1070870205][rma_qty]" size="3" type="text" value="1" /> 

這是桃色。

這個classic railscast是一個很好的fields_for的介紹,並且this comment解釋了我想要的魔法支架的效果 - 除此之外,找不到這個功能記錄在任何地方。

1

當你嵌套表格字段,你必須確保你的鏈接方法fields_for形成適當的表單生成器:

<% rma_form.fields_for :line_item, item do |item_f| %> 

通過調用fields_for獨自一人,你是從form_for打破鏈並因此出現錯誤的字段名稱。

+0

沒有得到我的參數line_item.id,但你是對的,它讓我走下去了解fields_for實際上是如何工作的 - 儘管它有時候看起來很奇怪 - 謝謝! – sbeam 2010-11-18 21:23:37

+0

@sbeam我的不好,我錯過了'fields_for'的第一個參數。我認爲在這些助手中使用模型參考的符號稍微更具可讀性。 – 2010-11-19 01:39:20