@Fly3110
web developer

Как указать namepsace в роутинге rails?

Всем привет

В роутинге rails, для обеспечивания версионности api, есть такая конструкция:

Rails.application.routes.draw do
  concern :versioned_api_methods do
    mount_devise_token_auth_for 'User', at: 'auth', controllers: {
        sessions: 'overrides/sessions',
    }

    resources :users, only: %i[show update]
  end

  namespace :v1 do
    concerns :versioned_api_methods
  end

  namespace :v2 do
    concerns :versioned_api_methods
  end

end


То есть, для контроллера users получаются пути v1/users, v2/users и так далее
Вопрос в контроллере overrides/sessions. Есть ли способ оставить его внутри concern, но использовать версионность?

Понятно, что можно всю конструкцию mount_devise_token_auth_for вынести в каждый namespace и руками прописывать v1/overrides/sessions, v2/overrides/sessions и так далее, но может быть возможно сделать это "централизованно"?

Спасибо
  • Вопрос задан
  • 44 просмотра
Пригласить эксперта
Ответы на вопрос 1
nbekseitov
@nbekseitov
Ruby on Rails developer
Используйте сonstraints
# app/constraints/version_constraint.rb
class VersionConstraint
  def initialize
    @versions = %w[ v1 v2 ]
  end

  def matches?(request)
    @versions.include? request.path_parameters[:version].to_s
  end
end

#routes.rb
scope ':version', constraints: VersionConstraint.new do
  concerns :versioned_api_methods
end
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Cashwagon Москва
от 120 000 руб.
PiRL Ventures Москва
До 180 000 руб.
Instamart Москва
До 220 000 руб.
23 марта 2019, в 17:57
2000 руб./за проект
23 марта 2019, в 16:34
700 руб./за проект
23 марта 2019, в 15:42
400 руб./в час