Rails Обновление содержимого формы при изменении элемента выбора - PullRequest
1 голос
/ 16 марта 2011

У меня есть форма с полем выбора и тремя полями ввода текста.Когда параметр в поле выбора изменяется, я хочу обновить три поля ввода текста значениями, соответствующими выбранному параметру.Значения являются объектами модели, хранящимися на сервере.

Я использую Rails 3 и пытаюсь сделать вещи незаметными, но не могу найти чистый способ сделать это.Я придумала пару ужасных, грязных решений, но пока ничего чистого.Что было бы хорошим способом связать все это вместе?В частности, у меня возникли проблемы с элементом select, запрашивающим объект модели с сервера.

Вот представление, которое создает форму:

= form.select :region_id, region_options_for_select(@business_location.region), :prompt => '-- Region --'
= form.text_field :city
= form.text_field :state, :label => 'Province/State'
= form.text_field :country

Поэтому я хочу заполнить городполя состояния / страны всякий раз, когда "регион" изменяется.Обратите внимание, что регион также является частью самой формы.

1 Ответ

3 голосов
/ 16 марта 2011

В jQuery что-то подобное может работать:

$("select").live("change", function(e) {
  e.preventDefault();
  $.ajax({
    url: "/location/" + $(this).val(), //I think, it could be something else
    dataType: "json",
    contentType: "application/json; charset=utf-8",
    success: function(data) {
      //you're returning a JSON object, so just iterate through it and bind it to
      //the value attributes of each field
    },
    error: function(xhr,exception,status) {
      //catch any errors here
    }
  });
});

На стороне Rails в LocationsController # show:

@location = Location.find(params[:id])
respond_to do |format|
  format.json { render :json => @location.to_json, :status => 200 }
end

Это примерно, как это могло бы работать. Замените любые названия контроллеров / моделей на те, которые я составил.

...