@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 и так далее, но может быть возможно сделать это "централизованно"?

Спасибо
  • Вопрос задан
  • 61 просмотр
Пригласить эксперта
Ответы на вопрос 1
nbekseitov
@nbekseitov
Ruby 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
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы