Ответ 1
ставить
match '*path' => 'your_controller#your_action'
в конце файла route.rb. Это важно, поскольку маршруты проходят сверху вниз.
См. также http://guides.rubyonrails.org/routing.html → 3.10
Я использую rails 3.0.14, и я создаю route.rb, используя изобретательный стиль. Я хотел бы иметь подстановочный маршрут, который ловит все запросы, которые не соответствуют указанному маршруту.
Каким образом можно построить такой маршрут?
ставить
match '*path' => 'your_controller#your_action'
в конце файла route.rb. Это важно, поскольку маршруты проходят сверху вниз.
См. также http://guides.rubyonrails.org/routing.html → 3.10
Для Rail 4 вам нужно указать тип запроса:
match "*path", to: "application#custom_action", via: :all
Как говорили другие, поставьте это в самом низу вашего файла маршрутов.
Не обязательно использовать именно "путь" в инструкции match '*path'
. Вы можете установить там любой токен:
get "*string1"
или
get "*string2"
Rails назначит ваш реальный HTTP-запрос параметру, названному после вашего токена, например:
get "*user" => "users#show"
в консоли:
Started GET "/john" ....
Processing by UsersController#show as HTML
Parameters: {"user"=>"john"}
Вы можете использовать несколько звездочек, например get "*id*user"
. Но в этом случае вы получите непредсказуемый результат, потому что Rails обрабатывает 2 или более звездочки "интуитивным способом" - для получения дополнительной информации см. http://guides.rubyonrails.org/routing.html#route-globbing-and-wildcard-segments
В дополнение к @steel и @awenkhh, я рекомендую добавить следующее к этому действию контроллера маршрута
respond_to do |format|
format.html
# other formats you already support
format.all { render text: '' }
end
В противном случае вы столкнетесь с некоторыми ошибками ActionView::MissingTemplate: Missing template
для форматов, которых вы не ожидали.
[rant] Особенно полезно для тех, кто пытается ошибочно атаковать векторы вокруг /wp-admin/css/wp-admin.css
и тому подобное. Кажется, я получаю около 100 запросов для /wp-admin/*
в день, от супер раздражающих людей, которые, по-видимому, хотели бы, чтобы я получил более дорогой план счетов Rollbar. [/Rant]