Маршрутизация Rails + маршрутизация AngularJS

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

app.config(function($routeProvider, $locationProvider) {
   $locationProvider.html5Mode(true);
   $routeProvider
     .when("/users/:u_id/restaurants/:r_id/menus/:m_id/sections/:sec_id/items", { templateUrl: "/assets/menus/items.html", controller: "MenuItemCtrl" })
});

Он отлично работает, когда я перехожу к пути, используя

<a href="./sections/{{section.id}}/items">View Items</a>

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

No route matches [GET] "/users/3/restaurants/3/menus/4/sections/4/items"

Если я создам этот маршрут в route.rb, он просто вернет JSON, связанный с ответом, и не направит к правильному шаблону.

Кто-нибудь знает, как решить эту проблему?


person dgolman    schedule 08.04.2014    source источник
comment
Добавьте полный маршрут в конце конфигурации маршрутизации в Rails: get '(*url)' => 'home#index' В этом примере метод index() home_controller обслуживает одностраничное приложение. Подробности см. в этом ответе.   -  person Sunil D.    schedule 09.04.2014


Ответы (1)


В маршруте rails вы должны перенаправить этот запрос на базовый URL-адрес angular, чтобы можно было выполнить angular.

Без этого рельсы отвечают на запрос. Вот как работают маршруты html5mode.

Редактировать:

Допустим, ваш угловой обслуживается из application#home. Вы хотите, чтобы все запросы GET были перенаправлены туда, поэтому angular может работать.

Добавление этого маршрута get '*path', to: 'application#home' сделает все запросы GET угловой страницей.

person Papzord    schedule 08.04.2014
comment
Можете ли вы привести пример, используя код, который я предоставил? я не совсем понимаю - person dgolman; 09.04.2014
comment
Это может вызвать некоторые проблемы при получении JSON, но вы можете добавить format: :html к маршруту. Кроме того, использование режима hashbang вместо html5 проще. Этот ответ может подойти вам. stackoverflow .com/questions/16677528/ - person Papzord; 09.04.2014
comment
когда я это делаю, он просто продолжает перенаправлять меня на эту страницу независимо от введенного URL-адреса. - person dgolman; 09.04.2014
comment
Это правда. Но теперь угловые маршруты должны делать свое дело. - person Papzord; 10.04.2014