Подтвердить что ты не робот

Rails select_tag с ajax-действием (Rails 3 и jQuery)

У меня есть следующий список выбора.

<%= select_tag "project_id", options_from_collection_for_select(@projects, "id", "title") %>

Когда пользователь выбирает опцию из приведенного выше списка, список ниже должен заполняться значениями из базы данных на основе указанного выше выбора.

<%= select_tag "version_id", options_from_collection_for_select(??project.versions??, "id", "title") %>

Я думаю, что я должен использовать событие onchange, но я понятия не имею, как его использовать. Кто-то мне помогает. Спасибо!

4b9b3361

Ответ 1

Javascript

function update_versions_div(project_id) {  
  jQuery.ajax({
    url: "/update_versions",
    type: "GET",
    data: {"project_id" : project_id},
    dataType: "html"
    success: function(data) {
      jQuery("#versionsDiv").html(data);
    }
  });
}

контроллер

def edit
  @projects = Project.all
  @versions = Version.all
end

def update_versions
  @versions = Version.where(project_id => params[:project_id]).all
  render :partial => "versions", :object => @versions
end

Просмотр

<%= select_tag "project_id", options_from_collection_for_select(@projects, "id", "title"), :prompt => "Select a project", :onchange => "update_versions_div(this.value)" %>
<div id="versionsDiv">
  <%= render :partial => 'versions', :object => @versions %>
</div>

Частичный: _version.html.erb

<%= select_tag "version_id", options_from_collection_for_select(versions, "id", "title"), :prompt => "Select a version" %>

Также добавьте маршрут для /update_versions в ваших маршрутах. rb

match "/update_versions" => "<controller>#update_versions"

Здесь вы должны заменить <controller> на имя контроллера.

Я не тестировал код, поэтому могут быть ошибки.

Обновление

PullMonkey обновил код с помощью примера Rails 3, который явно превосходит этот код. Пожалуйста, проверьте http://pullmonkey.com/2012/08/11/dynamic-select-boxes-ruby-on-rails-3/ также