0

У меня есть следующие две строки маршрутов по умолчаниюНеизвестное исключение Действие: Маршрутизация Ошибка в Rails 3.1

match '/:controller/:action' 
    match '/*path' , :to => 'map#catch_all' 

Так вопрос, когда пользователь попал в действующий контроллер и имя недопустимое действие, как /пользователь/AAAA затем получил и исключение «Неизвестное действие», потому что маршрут был захвачен первой строкой вышеупомянутых маршрутов. Я тоже не могу изменить порядок указанных строк.

Любая помощь ?? Все комментарии оценены. Заранее спасибо.

ответ

3

В процессе производства вы не должны позволять пользователю получать доступ к явно разрешенным действиям. Вы должны перечислить все доступные действия или использовать ресурс, чтобы разрешить спокойные пути автоматически. Это решит вашу проблему.

Кроме того, если введен неверный URL-адрес, сообщение 404 появится пользователю, что является правильным способом его обработки.

UPDATE: В вашем ApplicationController вы можете реализовать метод method_missing(method, *args), чтобы обрабатывать все несуществующие звонки действий, которые могут возникнуть из безразличных маршрутов.

def method_missing(method, *args) 
    # handle Unknown Action 
end 

Но надо знать, что это улавливает весь вызов метода, который не существующие, и это может вызвать проблемы с отладкой, например, в случае опечатки.

+0

Ваши баллы действительны, но у меня есть другой случай. У меня огромная база кода, поэтому можно перечислить все контроллеры/действия. Вторая строка делает именно то, что вы предложили, она попала в действие catch_all и вывела 404 в производство. Но проблема в том, что когда вы нажимаете правильное имя контроллера –

+0

Ошибка UnknowAction обрабатывается в промежуточном программном обеспечении диспетчера. Вам необходимо обходное решение для обработки не существующих действий. В чем проблема с страницей 404? – Matzi

+0

Нет проблем с 404 страницей, она была успешно отображена, когда пользователь набрал Invalid Controller и недействительный Action, но возникает исключение o0o0ps, когда пользователь нажимает на действительный контроллер и Invalid ACtion. –

Смежные вопросы