基于域名实现多语言时Devise路由报错问题排查
基于域名的多语言路由配置与Devise兼容问题
我想通过域名实现多语言功能,例如domain.fi.local对应芬兰语、domain.es.local对应西班牙语,且每个域名下均可切换至英语。为每个域名添加路由约束后,Devise功能出现失效问题:
- 将
devise_for放在约束外可避免重复调用报错,但访问Devise路由(如登出)时仍报错; - 尝试在约束内添加
devise_for :users, skip: :all,问题依旧。
原始routes.rb代码
Rails.application.routes.draw do devise_for :users constraints(host: "domain.fi.local") do scope "(:locale)", locale: /fi|en/ do resources :users do resource :profile, only: [:show, :edit, :update] end resources :trips end end constraints(host: "domain.es.local") do scope "(:locale)", locale: /es|en/ do resources :users do resource :profile, only: [:show, :edit, :update] end resources :trips end end # 通用 fallback 路由(默认英语) scope "(:locale)", locale: /en|fi|es/ do resources :users do resource :profile, only: [:show, :edit, :update] end resources :trips end # 健康检查 get "up" => "rails/health#show", as: :rails_health_check # 唯一根路径避免冲突 root "trips#index" end
修改后的routes.rb代码
Rails.application.routes.draw do # 全局定义Devise路由(约束外) devise_for :users constraints(host: "domain.fi.local") do scope "(:locale)", locale: /fi|en/ do devise_for :users, skip: :all # 避免约束内生成重复路由 resources :users do resource :profile, only: [:show, :edit, :update] end resources :trips end end constraints(host: "domain.es.local") do scope "(:locale)", locale: /es|en/ do devise_for :users, skip: :all # 避免约束内生成重复路由 resources :users do resource :profile, only: [:show, :edit, :update] end resources :trips end end # 通用 fallback 路由(默认英语) scope "(:locale)", locale: /en|fi|es/ do devise_for :users, skip: :all # 避免生成重复路由 resources :users do resource :profile, only: [:show, :edit, :update] end resources :trips end # 健康检查 get "up" => "rails/health#show", as: :rails_health_check # 唯一根路径避免冲突 root "trips#index" end
内容的提问来源于stack exchange,提问作者narovi
相关产品推荐
相关产品推荐

