Для причин, я хочу, чтобы один контроллер обрабатывал html-запросы и другой дескриптор json api-запросов.Rails routing: ограничения формата, когда ни один не указан
Я получил это в моих маршрутах:
scope module: :api, as: :api do
constraints format: :json do
resources :users
end
end
constraints format: :html do
resources :users
end
Это прекрасно работает, когда URL спортивный суффикс: /users.json
проходит через мой Api::UsersController
а ля api_users_path
; /users.html
проходит через мой UsersController
à la users_path
.
Однако это не ведет себя так, как ожидалось, когда в URL-адресе нет суффикса. Реализация ограничений, связанных с лямбда-шоу, идет не так:
#=> visiting /users
scope module: :api, as: :api do
constraints ->(request){ puts "In api: #{request.format}"; request.format == :json } do
resources :users
end
end
constraints ->(request){ puts "In html: #{request.format}"; request.format == :html } do
resources :users
end
#=> In api: text/html
#=> (request.format == :json) => false
и все же он попадает в контроллер api.
Отсутствие навыков с пользовательскими классами ограничений или лямбда или чем-либо препятствует тому, чтобы рельсы выбирали первый маршрут, определенный, если ни одно из ограничений не соответствует.
я не могу найти способ, чтобы написать ограничение, которое перехватывает, когда URL отсутствует суффикс, и я не чувствую, как будто я должен request.format == :html
отчеты to-правда, когда я к навигации /users
. Почему второе ограничение не улавливает?
Кроме того, хотя я мог бы «исправить» это, изменив порядок этих двух, я бы скорее знал, почему мои ограничения не работают правильно.
Кто-нибудь знает, как применять эти ограничения по-разному, чтобы эффективно включить любой формат, а не только суффикс url, или иметь явное ограничение, которое не поддерживает суффикс формата?
на второй contraint косяк поймать, что маршрут оленья кожа матч – apneadiving
Почему вы не просто установить формат запроса себя для всех действий в вашем апи ? – apneadiving
на самом деле, так как вы прописываете свой контроллер, я не понимаю, зачем вам нужны ограничения маршрута. – apneadiving