simple_form关联列表由jquery更改

时间:2015-02-17 06:21:24

标签: javascript jquery ruby-on-rails ajax

我有一个CarType模型,其属性为manufactureremodel,基于此模型指定了Car模型。 Car模型只有一个属性color。我已经定义了如下关联:

在CarType.rb中:

has_many :cars

在Car.rb中:

belongs_to :car_type

我使用simple_form创建新的Car实例。但是,由于Car模型没有manufacturermodel属性,因此我需要指定关联的CarType,然后指定color。在表单中,用户应首先选择manufacturer,以启用model列表,其中列表应仅包含与该制造商相关的model。然后用户将指定颜色。

我希望实现为manufacturere定义modelCar的方式是:我先使用select_tag指定manufacturer,然后使用jquery和ajax,我得到model的相关manufacturere列表,然后使用基于model的模型列表启用manufacturer的字段。根据所选模型,我指定关联以及稍后使用。总之,我在定义新Car

的表单中有以下内容
= select_tag "manufacturer", options_for_select(CarType.all.map{|s| s.manufacturer}.uniq, (f.object.car_type_id ? f.object.car_type.manufacturer : nil)), input_html: {id:'manufacturer_ajax'}

= f.association :car_type, input_html:{ id:'model_js'}

对于jquery,我有:

javascript:
 $(function(){
   $("#manufacturer_ajax").change(function(){        
    $.ajax({
      url: '#{SETTINGS[:root_path]}admin/car_type/models.json',
      data: {manufacturer:$(this).val()},
      dataType: "json",
      type: "GET"
    }).done(function(data){
      $("#model_js").html("<option> </option>");
      $.each(data, function(index,item){
        $("#model_js").append("<option value="+item.id+">"+item.model+"</option>");
      });
      $("#model_js").removeAttr("disabled");
    });
  });
});

我在控制台中检查了ajax并发现它运行良好并获得相关模型。但是在ajax之后,("#model_js").removeAttr("disabled");没有正常工作,model的列表仍然被禁用。

你可以告诉我在哪里弄错了吗?另请通过select_tag告诉我您对实施总体思路的看法。

0 个答案:

没有答案