2011-12-29 70 views
0

我有一个红宝石哈希,其中包含汽车制造商和型号后面跟着一年。 它看起来像:使用jQuery填充红宝石哈希中的选择列表选项

makes_a={"saturn"=>{"sky"=>["2007", "2009", "2008"], "l-series"=>["2004", "2000", "2005", "2003", "2001", "2002"]}} 

我想填充3名选择列表1)使2)模型和3)年 当一个汽车品牌的选择(土星),第二个列表应该得到填充 的2种型号(天空和L系列)。'

当选择特定模型(天空)时,应该使用年份选项填充第3个选择列表。

我使用下面的代码片段的轨道填充第一选择列表:

<%= select_tag "make-select", options_for_select(@all_makes_models.to_hash.keys.sort, params[:make]), :class=>"car-make-select" %> 

我不知道如何使用jQuery访问红宝石哈希值。

试图访问像下面的红宝石哈希给我javascript的语法错误。

$('#make-select').change(function() 
{  
    make = $(this).attr('value'); 
    models = '<%= @all_makes_models[" + make + "].to_hash.keys %>'; 
    alert(models); 
    $('#car-models').val(models); 
}); 

有关如何访问哈希在JavaScript中的任何想法? (不js.erb)

感谢

回答

-1

This post为我解决了这个问题。

就像你,我没有使用数据库中的数据。只要忽略查询的控制器行并将params [:id]传递给partial。这个解决方案还可以让您将数据从您的散列(我宁愿使用已经排序的数组)传输到数据库,并尽可能少地修改代码,以免将来您的应用程序变得更加复杂。

1

如何作为一个JSON对象分配所有的品牌和型号的“模型” javascript变量?每次选择列表更改时,都可以遍历数据并重新填充表单元素。

<script type="text/javascript"> 
    var models = <%= @all_makes_models.to_json %>; 

    $(document).ready(function() { 
     $(".car-selector").change(function() { 
      // Traverse JSON object, repopulate select lists. 
     }); 
    }); 
</script> 

如果您不想在默认情况下呈现在你看来如此多的数据,你可以使用相同的概念,而是通过提交部分完成的形式通过AJAX获取JSON数据。