Ruby on Rails - Загружать штат и город, когда выбрана страна и штат

Я имею 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 для countries, states & cities и ТОЛЬКО ЗАГРУЗИТЬ, сообщает, когда выбрана страна, и загружать города, когда выбирается штат?

PS: Загруженные штаты и города должны быть основаны на том, какая страна и штат выбраны.

Есть ли драгоценный камень для того, что я ищу, или решение Ajax? (другие решения также приветствуются)

1 ответ

Решение

Вы можете сделать это в рельсах, не используя драгоценные камни.

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, чтобы заполнить элемент div новым сгенерированным html.

Другие вопросы по тегам