我有一个CarType
模型,其属性为manufacturere
和model
,基于此模型指定了Car
模型。 Car
模型只有一个属性color
。我已经定义了如下关联:
在CarType.rb中:
has_many :cars
在Car.rb中:
belongs_to :car_type
我使用simple_form创建新的Car实例。但是,由于Car模型没有manufacturer
和model
属性,因此我需要指定关联的CarType
,然后指定color
。在表单中,用户应首先选择manufacturer
,以启用model
列表,其中列表应仅包含与该制造商相关的model
。然后用户将指定颜色。
我希望实现为manufacturere
定义model
和Car
的方式是:我先使用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
的列表仍然被禁用。