Rails select_tag onchange ajax request

Я пытаюсь создать форму, которая добавляет элементы в форму после выбора определенных элементов. Например, после того, как пользователь выбирает страну, я хочу, чтобы там был вызов ajax, где все регионы/состояния, связанные с этой страной, были найдены, а затем вставлены в элемент выбора в форму. Затем, как только пользователь выбирает регион/состояние, тот же процесс будет иметь место, и другой элемент будет добавлен в форму в ответ на выбранное значение. Как побочная заметка, я хочу сделать это все ненавязчиво. Далеко, у меня это на мой взгляд:

<%= form_tag(find_school_path, :method=>'get', :class => 'form-horizontal', :id => 'find_by_country_form') do %>

    <%= label_tag :country_selection, "Country" %>
    <%= select_tag :country_selection, options_from_collection_for_select(@countries, :id, :name), :prompt => "Country" %>

<% end %>

Затем внутри этого javascript файла этого представления я обрабатываю вызов ajax при выборе страны:

$('#country_selection').change(function(){
  $.ajax({
    url: "find/country_selection",
    type: "GET",
    data: {'country=' + $('#country_selection option:selected').value() },
  })
});

Затем внутри моего контроллера, в котором указан выше url:, я:

def country_selection
    @country = Country.find(params[:country])
    @regions = @country.regions

    respond_to do |format|
       format.js {  }
    end
end

Наконец, в моем файле country_selection.js.erb у меня есть:

$('#country_selection').after('<%= label_tag :region_selection, "State/Region" %><%= select_tag :region_selection, options_from_collection_for_select(@regions, :id, :name), :prompt => "State/Region" %>');

Я не получил этого, чтобы работать. Я даже не уверен, что делаю это правильно. Когда я нажимаю select и меняю этот параметр, ничего на странице не меняется.

Решение

Мой код был очень хорош, но событие ".change" не было распознано. Я изменяю его на .live('change', function() {...}) ', и он работал нормально.

Ответы

Ответ 1

Это не самый аккуратный код, который я видел, но я не вижу в этом ничего плохого.

Я бы добавил несколько предупреждений, чтобы вы могли сузить проблему. Вы можете поместить его в функцию изменения, чтобы убедиться, что он попал, вы можете добавить его в country_selection.js.erb, чтобы убедиться, что он попал. Это немного поможет.

Я бы также изменил country_selection.js.erb, чтобы отобразить частичный внутри контейнера div, где вы хотите, чтобы новый выбор был таким, чтобы вы могли поместить этот код в частичный, и он будет немного более аккуратным. Вы можете просто передать параметр части, которая будет выбрана страной.