2015-04-25 69 views
1

我有一张游览表(以及允许多个景点单次游览的游览表)。在我的新建/创建表单中,我试图在巡视中添加多个景点。我这样做的方式是使用jQuery,将输入表单的所有值作为单个字符串“加入”,并将其设置为单个隐藏字段的值。我迷路了,一旦它遇到了模型,然后将每个模型添加到表格中,如何展开它。有任何想法吗? index.html.erb在轨道中传递隐藏字段

<div class="input_fields_wrap"> 
    <button class="add_field_button">Add More Sights</button> 
     <%= f.label :sights %> 
    <input type="text" class="sight_field"> 
</div> 
<div> 
<%= f.hidden_field :sights %> 
</div> 

回答

2

tour.js

$("#new_tour").on("submit", function(event){ 
    event.preventDefault(); 
    var inputs = $.map($(".sight_field"), function(input_element){ 
     return input_element.value; 
    }); 
    var inputs_joined = inputs.join("|"); 
    $(":hidden").val(inputs_joined); 
}); 

一部分与你不需要做这种事情的轨道。

在你的字段周围创建一个适当的表单,并让它提交。在你的控制器中,所有的变量都在params-hash中。例如。

params[:sights] 

如果它变得复杂,你可以拥有的东西像

<input type="hidden" name="seeing[paris][sight]" value="fine" /> 
<input type="hidden" name="seeing[munich][sight]" value="fantastic" /> 

这将导致在控制器

params[:seeing][:paris][:sight] 
params[:seeing][:munich][:sight] 

如果这是出于某种原因不可行,你也可以做这样的事情:

<input type="hidden" name="sights" value="fine, fantastic, ok" /> 

而在控制器中

all_sights = params[:sights].split(',') 

这将是你的景点数组。

+0

安德烈亚斯,你的意思是我不需要“加入”?只需将视线作为单个隐藏字段中的散列,轨道就会理解我正在尝试拥有多个该属性? – nonegiven72

+0

我已更新我对您评论的回答。我知道,你的意思是把这些东西放在一个价值中,但是如果你愿意的话,可以这样试试。它更加清晰,您可以立即获得订单和可读性。 –

+0

谢谢安德烈亚斯。会投票给你,但我需要15代表:-(。 – nonegiven72