2012-01-04 62 views
0

我實現基於瑞安貝特的[總是優秀] Railscast,#52,更新通過複選框形式,http://railscasts.com/episodes/52-update-through-checkboxes從形式

在我的情況下傳遞一個數組的數組,實際上,我想通過通過選擇每個複選框的ID數組。

在我的形式重點線看起來是這樣的,

<td"><%= check_box_tag "sales_ids[]", batch["sales_ids"] %></td> 

批[「sales_ids]本身就是一組ID,而我希望的結果是所有的檢查項目的數組(每個都代表一個ID數組)

如果我從表單中檢查個人 batch [「sales_ids」],那麼我可以確認它確實是一個數組,例如[3907,3908 ,3909](請記住,我想傳遞這些項目的數組,每行檢查)

從處理表單看起來像這樣的方法中的關鍵線,

params[:sales_ids].each { |batch| Sales.update_all(["code=?", 99], :id => batch) } 

此代碼,再次基於所述Railscast示例的目的,是要迭代陣列的陣列上,並更新每個子-idray的ids。

當我檢查接收到的陣列,我看到,[「5412」,「3907 3908 3909」,「2452」]

子陣列不是作爲數組處理,並且(原因我不不明白)每個'substring'(在本例中爲「5412」,「3907」,「2452」)的第一項被更新。

看來,傳遞的子數組實際上不是一個數組,或者其他東西是錯誤的。

我很感激如何傳遞和接收這些ID作爲數組數組的幫助。謝謝。

回答

0

據我所知,以這種方式傳遞數組的數組將無法通過表單工作。然而,有一項工作應該適合你。

視圖

您的複選框做到這一點:(我假設批[ 「sales_ids」]是一個數組)

<%= check_box_tag "sales_ids[]", batch["sales_ids"].join(",") %> 

而在你的控制做到這一點:

params[:sales_ids].collect{|a| a.split(",") }.each { |batch| Sales.update_all(["code=?", 99], :id => batch) } 

相反傳遞一個數組數組,我們現在傳遞一個逗號分隔值數組。在控制器中,這些逗號分隔值被轉換成數組。

+0

這是一種享受,正如你寫的一樣。謝謝你,非常感謝。 – Snips 2012-01-04 10:59:34