Backbone.js + Rails 3 URL и коллекции с вложенными маршрутами
Я пытаюсь создать новое приложение с Rails и Backbone.js, но есть несколько вложенных отношений, которые делают его довольно сложным.
На стороне Rails я использую отношения HABTM между ингредиентами и аллергенами. Я пытаюсь получить доступ к ингредиентам, которые связаны с множеством аллергенов. План состоял в том, чтобы запросить таблицу Allergens с массивом, получить их идентификаторы, а затем запросить их по таблице AllergensIngredients, чтобы получить идентификаторы Ingredients.
Маршруты вложены так:
resources :ingredients do
resources :allergens
end
С URL-адресом "/ ингридиенты /: ингредиент_ид / аллергены". Это прекрасно работает для Rails. Со стороны Backbone я пытался использовать Collections для получения Аллергенов с помощью URL / Аллергены, но это отклонено в соответствии с моими маршрутами Rails (маршрут / аллергенов не существует). Итак, я добавил автономный resources :allergens
маршрут под моими вложенными маршрутами. Это создало узнаваемый маршрут для Backbone, но проблемы все еще остались с моим Rails allergens_controller.rb:
class AllergensController < ApplicationController
respond_to :html, :json
def index
respond_with(
@ingredient ||= Ingredient.find(params[:ingredient_id]),
@allergens = @ingredient.allergens,
)
end
# ...
end
потому что @ingredient не может быть найден без идентификатора. Я пытался использовать Backbone.sync и $.get, но для них все еще требуется URL, который в конечном итоге проходит через контроллер rails. Как я могу использовать Backbone, чтобы просто запросить одну таблицу в базе данных, без какого-либо вмешательства со стороны Rails или URL? Спасибо большое за вашу помощь!
1 ответ
Я заставил его работать, используя другой подход. Я создал новое действие в allergens_controller, который только что возвратил Allergen.all, а затем использовал запрос get AJAX в Backbone для возврата объекта xhr. Не элегантное исправление, но исправление тем не менее!