Rails улавят всички маршрути, с изключение на ресурси и HTML

Използвам Angular html5mode, така че маршрутизирането на Rails е настроено да пренасочва всички неуспешни заявки към root

# Angular catch all to allow page refresh
get '*page' => "home#index"

Това работи добре, освен когато модул Angular изисква липсващ шаблон (/assets/templates/page.html например), когато причинява безкраен цикъл

Как мога да кажа на Rails да хваща всички маршрути, освен нещата в /assets?


person Jak Charlton    schedule 07.10.2013    source източник


Отговори (2)


Забелязах, че това е доста старо, но го намерих чрез Google и не бях доволен от единствения отговор тук. Тъй като сам съм работил през това, ще споделя моите решения.

Използвайте параметъра за формат във вашия маршрут

get "/*path" => "home#index", format: false

Просто деактивирайте опцията за форматиране за пътя със заместващи знаци, така че да игнорира заявки с всякакъв формат (напр. css, js, png...)


Използване на ограничение в маршрута

get "/*path" => "home#index", constraints: -> (req) { !(req.fullpath =~ /^\/assets\/.*/) }

Посочете опция за ограничение с проста ламбда, проверяваща стойността на вашия път, не е най-добрият регулярен израз, но показва идеята, към която се стремя тук...




Лично аз използвам параметъра за формат в моите приложения, опцията за ограничения също ви позволява да подадете обект, вижте ръководството за релси за повече информация -> http://guides.rubyonrails.org/routing.html#advanced-constraints

person rl09    schedule 14.08.2014

Маршрутите се оценяват отгоре надолу, така че можете да направите следното:

# Catch all missing templates
get '/assets/templates/*page' => '/assets/templates/default.html'

# Angular catch all to allow page refresh
get '*page' => "home#index"

Липсващите шаблони ще бъдат уловени от първия оператор, а всички други липсващи маршрути ще бъдат уловени от втория оператор

person Rajesh Kolappakam    schedule 07.10.2013