2011-08-24 78 views
7

我有這樣的hidden_​​tag在我的形式通過隱藏字段傳球達陣,以軌道

<%= f.hidden_field :loc , {:multiple => true} %> 

這使得以

<input id="business_loc" multiple="multiple" name="business[loc][]" type="hidden" style="color: rgb(175, 175, 175); " value=""> 

目前正在設置的business_loc值作爲逗號分隔字符串希望的軌道會在提交表單時識別。但是,這是我在服務器端

 "loc"=>["80.22167450000006,13.0454044"] 

代替

 "loc"=>[80.22167450000006,13.0454044] 

如何設置的隱藏字段的正確值了值,所以軌道可能會正確地理解它。

+2

什麼是造型隱藏字段的使用? ;-) – Mischa

+0

@mischa,不知道,我生成的代碼使用hidden_​​field標記.. :) – RameshVel

回答

3

您需要使用多個隱藏字段,一個用於值數組的每個元素。

例如:

<input id="business_loc" multiple="multiple" name="business[loc][]" type="hidden" style="color: rgb(175, 175, 175); " value="80.22167450000006"> 
<input id="business_loc" multiple="multiple" name="business[loc][]" type="hidden" style="color: rgb(175, 175, 175); " value="13.0454044"> 

...如果您需要的代碼動態與JS添加這些,這裏有一個jQuery的例子:

var field = $('<input id="business_loc" multiple="multiple" name="business[loc][]" type="hidden" style="color: rgb(175, 175, 175); " value="13.0454044">'); 
var form = $('#your-form-id'); 
form.append(field); 
+0

我雖然那樣。但是我從客戶端收集隱藏的價值,而且這樣做更難。因爲我需要處理很多值 – RameshVel

+0

是的,您需要動態添加一個新元素。 – Winfield

+0

如果我現在需要爲每個輸入使用不同的ID,該怎麼辦?因爲以同樣的方式添加了jQuery,現在我想通過它的ID刪除它們中的任何一個。 –

1

我發現text_area的,使事情不工作不得不添加一堆隱藏的表單。只要將文本區域的值設置爲看起來像[1,31,51,61]的東西,它應該可以工作,假設在您的模型中,您有serialize :var

1

我最近有同樣的問題。我的解決方案是通過在逗號分隔數組來簡單地在服務器端處理它。在我的情況下,它看起來像這樣:

# thing_that_has_many_objects.rb  <-- showing custom setter method from the model because my example involves using a virtual attribute 
    # params[object_ids] = ["1,2,3,4,5"] <-- from the form - note the format of array with only one element 

    def objects=(object_ids)  
    split_array = object_ids[0].split(',') 
    split_array.each do |id| 
     self.objects.build(object_id: id) 
    end 
    end 
+0

你如何調用自定義setter來執行?爲了分裂。 –