0

我有countries, states & cities带有模型的数据库Country, State & City

目前的协会:

class Country < ActiveRecord::Base
  has_many :states
end

class State < ActiveRecord::Base
  belongs_to :country
  has_many :cities
end

class City < ActiveRecord::Base
  belongs_to :state
end

目前,我使用此 jQuery 仅显示基于所选国家/地区的状态,但它仍会加载 select[options] 中的所有状态,这会减慢页面加载速度。

- jQuery ->
  states = $('#q_state_id_eq').html()
  update_states = ->
    country = $('#q_country_id_eq :selected').text()
    options = $(states).filter("optgroup[label=#{country}]").html()

    if options
      $('#q_state_id_eq').html(options)
      # Add in a blank option at the top
      $('#q_state_id_eq').prepend("<option value=''></option>")
      # Ensure that the blank option is selected
      $('#q_state_id_eq option:first').attr("selected", "selected");
    else
      $('#q_state_id_eq').empty()

  $('#q_country_id_eq').change ->
    update_states()

  update_states()

在我的表单中(我正在使用 Simple_form_for ,如何添加collection_select/select forcountries, states & citiesONLY LOAD,选择国家时的状态和选择状态时的加载城市

PS:加载的州和城市需要根据选择的是哪个国家和州。

我正在寻找什么宝石或 Ajax 解决方案? (其他解决方案也值得赞赏)

4

1 回答 1

2

您可以在不使用任何 gem 的情况下在 rails 中执行此操作。

f.collection_select(:state_id, State.all, :id, :name, {},{:data => {  :remote => true,
                :url => url_for(:controller => "states", 
                                :action => "display_cities")
            }
    }
)

在 display_cities 操作中,根据传递的 state_id 过滤城市。使用 display_cities.js.erb 用生成的新 html 填充 div 元素。

于 2016-02-26T11:12:08.683 回答