2014-03-25 33 views
0

我有一个简单的疑问。 我有两个下拉字段,分别是州和其他城市。我从我的数据库中加载这两个我有两个名称状态和城市表。此外,当我选择一个国家城市acordingly改变我已经写了jQuery代码太.. 这是我的所有状态加载到我的选择标签在Ruby on Rails中从数据库获取值

<%= jl.select :state_id , State.all.map{|j| [j[:name], j[:id]]}, {class: 'select2'} %>   

我想,当我加载页面intialy我是不要我的城市领域变成空白。我希望它是一个下拉列表,其中包含与某些特定state_id相对应的城市。 那么我应该如何选择城市的标签。城市表格包含名称,ID和state_id。

+0

您的第一个州的所有城市,然后套入下降down.But更好的方式,通过Ajax来做到这一点。 –

回答

4

增加号码至您的状态下拉列表

<%= jl.select :state_id , State.all.map{|j| [j[:name], j[:id]]}, {class: 'select2',id:'states_dropdown'} %> 

然后你的城市下拉应该为以下几点:

<%= jl.select :city_id , City.where(:state_id=> "specific_id").map{|j| [j[:name], j[:id]]}, {class: 'select2'} %> 

,并在你的咖啡脚本文件中添加此

$("#states_dropdown").change -> 
     $.ajax 
      url: '/category/childrens' 
      type: 'GET' 
      data : 
       state_id: $(this).val() 
      success: (data, status, response) -> 
       #update cities dropdown 
      error: -> 
       # Hard error 
+0

是否有任何方式,我可以得到state_id从job_location表中存储的值..就像我写p job.job_locations.first我得到的输出像#在控制台中。我想单独提供那个state_id –

+0

这就是你要求的job.job_locations.first.state_id或者我错了吗? – Kimooz

+0

是啊几乎所有说d相同的答案..但即时通讯错误,当我把类似于<%p job.job_locations.first.state_id%> 未定义的方法'state_id'为零:NilClass –

2

你应该在加载时编写代码。

var cities_obj_arr = <%= @cities.to_json %>; 

$(document).on('change', "#state_select_box", function(){ 
    var state_id = $(this).val(); 
    var str_option = ''; 
    $.each(cities_obj_arr, function(index, city_obj){ 
    if(state_id == city_obj['city']['state_id']){ 
     str_option = str_option + "<option value='"+city_obj['city']['name']+"'">"+city_obj['city']['name']+"</option>"; /*city_obj['city']['name'] city is object name for cities*/ 
    } 
    }); 
    $(this).html(str_opotion); 
}); 

请看看形象,它会帮助更多。

enter image description here