使用jQuery填充ruby哈希中的选择列表选项

时间:2011-12-29 21:32:08

标签: jquery ruby-on-rails select hash

我有一个红宝石哈希,包含汽车品牌和型号,然后是年份。 它看起来像:

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

我想填写3个选择列表1)制作2)模型和3)年 当选择汽车制造(土星)时,应填充第二个列表 可用的两种型号(天空和L系列)。'

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

我使用以下rails代码段填充第一个选择列表:

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

我不知道如何使用jquery访问ruby哈希。

尝试访问ruby哈希,如下所示,给出了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)

由于

2 个答案:

答案 0 :(得分:1)

如何将所有品牌和型号分配到&#39;模型&#39; javascript变量作为json对象?每次选择列表更改时,您都可以遍历数据并重新填充表单元素。

<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数据。

答案 1 :(得分:-1)

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

正如您所说,我没有使用数据库中的数据。只需忽略进行查询的控制器行并将params [:id]传递给partial。此解决方案还允许您将数据从哈希(我更愿意使用已排序的数组)传输到数据库,并且如果您的应用程序将来变得更复杂,则最少修改代码。