设置
我们当前的Rails应用程序是由安装为引擎的子应用程序组成的。通常,这些引擎安装在主routes.rb
文件中的子域上,如下所示
mount MySubApp::Engine => '/', as: :sub_app, constraints: {subdomain: 'sub_app'}
问题所在
MySubApp
的routes.rb
文件中的路由在使用命名的_url
帮助器时不能获取子域。
MySubApp::Engine.routes.draw do
resources :foos
end
给了我们sub_app.foo_url(5)
,但结果是
当我们需要的时候
tl;dr
如何将引擎的安装约束传递到其命名的路由?
编辑:一种解决方法
虽然我仍然更喜欢一个更好的解决方案,但以下方法将会起作用。您可以将所有路径包装在每个子应用程序的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变量中,并做了一个包装器,这也不是干的。
发布于 2015-02-03 06:27:12
@Aaron不确定你是否解决过这个问题,但请查看
config.action_dispatch.tld_length
设置(在引擎的配置上)。我不确定它将如何与引擎反应,但在我们的例子中,它允许我们处理临时服务器的子子域的情况(因此,当我们在临时服务器上使用_url
帮助器时,它正确地执行subdomain.staging.domain.com
,而不是subdomain.domain.com
)。
发布于 2014-06-23 07:31:22
https://stackoverflow.com/questions/23829884
复制相似问题