select_tag Обновление Ajax с Rails3 + Jquery - PullRequest
1 голос
/ 28 ноября 2010

У меня есть select_tag, который отображает типы категорий товаров. Я хочу сделать обновление Ajax, когда пользователь выбирает категорию продукта и перечисляет все продукты в div под тегом select.

Я думаю, что смогу обработать часть отображения продукта с помощью шаблона part и js. Но я не знаю, как реализовать

выбор категории товара делать ajax-запрос (с параметрами) к контроллеру rails. (Почти все примеры в сети связаны с обновлением формы AJAX ....)

Может ли кто-нибудь мне помочь - заранее спасибо

Я использую рельсы 3, Jquery

ура

Самера

1 Ответ

4 голосов
/ 29 ноября 2010

Было бы полезно, если бы вы дали нам больше информации о ваших моделях данных. Я обрисую то, что вы думаете, основываясь на вашем вопросе.

class Product < ActiveRecord::Base
  belongs_to :category
end

class Category < ActiveRecord::Base
  has_many :products
end

и при условии, что у вас настроены маршруты:

resources :categories do
  resources :products
end

вам нужно подключить событие change к select_tag, чтобы запросить список продуктов на основе выбранного идентификатора категории.

$('select#categories').change(function(){
  var category_id = $(this).find('option:selected').val();
  $.getJSON(
    '/categories/' + category_id + '/products',
    function(response) {
      // render your template on the page here
    }
  );
});

Я написал плагин jQuery для упрощения базовых взаимодействий RESTful с контроллером Rails, поэтому его можно записать так:

$('select#categories').change(function(){
  var category_id = $(this).find('option:selected').val();
  $.read(
    '/categories/{category_id}/products',
    { category_id: category_id },
    function (response) {
      // render your template
    }
  );
});

Хотя $.read не намного проще, чем $.getJSON, другие операции сэкономят вам много времени на печатание.

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

...