【问题标题】:Passing array via hidden fields to rails通过隐藏字段将数组传递给rails
【发布时间】:2011-11-02 18:58:09
【问题描述】:

我的表单中有一个这样的 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 值设置为逗号分隔的字符串,希望 rails 在提交表单时能够识别。但这是我在服务器端得到的价值

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

改为

      "loc"=>[80.22167450000006,13.0454044] 

如何在隐藏字段中设置正确的值,以便rails可以正确理解。

【问题讨论】:

  • 设置隐藏字段样式有什么用? ;-)
  • @mischa,不知道,我使用 hidden_​​field 标签生成了代码.. :)

标签: ruby-on-rails hidden form-fields


【解决方案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

【讨论】:

  • 如何调用要执行的自定义设置器?为了进行拆分。
【解决方案2】:

我发现 text_area 可以让事情顺利进行,而无需添加一堆隐藏的表单。只需将文本区域的值设置为类似于 [1,31,51,61] 的值,它应该可以工作,假设您的模型中有 serialize :var

【讨论】:

    【解决方案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);
    

    【讨论】:

    • 我想。但我正在从客户端填充隐藏的值,而且这种方式更难。因为我需要处理很多值
    • 是的,您需要动态添加一个新元素。
    • 如果现在我需要为每个输入设置不同的 ID 怎么办?因为以与 jQuery 相同的方式添加它们,现在我想通过其 ID 删除它们中的任何一个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-31
    • 1970-01-01
    • 2019-11-02
    • 1970-01-01
    • 2020-11-16
    相关资源
    最近更新 更多