Динамическое добавление элементов в список выбора в Ruby On Rails с помощью Ajax - PullRequest
1 голос
/ 13 августа 2010

Я рассмотрел целую кучу решений для этого и, возможно, я просто плотный, но я не могу заставить что-либо работать.Это два выбора, которые я пытаюсь связать вместе в представлении «продукт / новый», который позволит пользователю выбрать категорию продукта и затем ограничить список подкатегорий:

 <p>
   <%= f.label :category_id %>: 
   <%=  f.select("category", Category.find(:all).collect {|c|[c.name, c.id]})%>
 </p>
 <p>
   <%= f.label :subcategory_id %>:
   <%=  f.select("subcategory", Subcategory.find(:all).collect {|s|[s.name, s.id]})%>
 </p>

У меня есть функцияКонтроллер подкатегории для получения информации из базы данных:

  def get_subcategories
    @subcategories = Subcategory.find_by_category_id(:all)
  end

Но я не могу понять, как соединить его вместе, и кажется, что в RoR это должно быть легко.

1 Ответ

0 голосов
/ 13 августа 2010

Ну, это не совсем тривиально, но это достижимо с небольшим усилием.Базовый подход будет следующим:

  • Заполнение списка выбора категории при первоначальном отображении представления
  • Добавление обработчика JavaScript, который будет запускаться при изменении этого значения
  • Выполнитьвызов AJAX на сервер в этом обработчике и вызов вашего метода get_subcategories в действии контроллера
  • Пусть действие контроллера отвечает значениями для заполнения списка выбора подкатегории
  • Получите ответ AJAXобработчик обновляет HTML для списка выбора подкатегории
  • В случае, если вы хотите, чтобы список выбора категории заполнялся значением по умолчанию при первоначальной визуализации формы, вы захотите, чтобы при этом автоматически выполнялся вызов AJAX.время, даже до того, как пользователь что-то выбрал.

Например, в JQuery вы можете поместить это вместе со следующими методами

  • .change() устанавливает обработчик насписок выбора
  • .triggerEvent('change') вызовет событие после загрузки (если вам это нужно)
  • $.getJSON() можно использовать для получения и анализа ответа AJAX
  • .remove() и .append() можно использовать для очистки и обновления выбора подкатегории с результатом
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...