设置
我们当前的 Rails 应用程序由作为引擎安装的子应用程序组成。通常,这些引擎安装在主 routes.rb
中的子域上。文件如下
mount MySubApp::Engine => '/', as: :sub_app, constraints: {subdomain: 'sub_app'}
问题
MySubApp
内的路线的 routes.rb
文件 不要使用命名时获取子域 _url
helper 。例如以下在 apps/my_sub_app/config/routes.rb
MySubApp::Engine.routes.draw do
resources :foos
end
给我们
sub_app.foo_url(5)
但结果是http://www.example.com/foos/5
当我们想要
http://sub_app.example.com/foos/5
tl;博士
如何将引擎的安装约束传递给其命名路由?
编辑:解决方法
虽然我仍然更喜欢更好的解决方案,但以下方法可行。您可以将每个子应用中的所有路由都包裹起来
routes.rb
可以像这样安装在子域上的文件MySubApp::Engine.routes.draw do
constraints Rails.application.routes.named_routes[:sub_app].constraints do
resources :foos
end
end
编辑 2:一个不太理想的解决方法
一位评论者(自从被删除?)指出你可以通过
subdomain
帮助者的选项,但我们希望避免使用 sub_app.foo_url(5, {subdomain: 'sub_app'})
对于每个跨子域链接。即使我们将子域名移动到 ENV 变量中并进行了包装,这也不是 DRY。
最佳答案
@Aaron 不确定您是否已修复此问题,但请查看
config.action_dispatch.tld_length
设置(在引擎的配置上)。我不确定它会如何与引擎 react ,但在我们的例子中,它让我们处理我们的登台服务器的子子域的情况(所以当我们使用
_url
帮助器和登台服务器时,它正确地执行 subdomain.staging.domain.com
,而不是subdomain.domain.com
)。
关于ruby-on-rails - 安装在子域上的 Engine 中的路由不继承约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23829884/