首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >挂载在子域上的引擎中的路由不继承约束

挂载在子域上的引擎中的路由不继承约束
EN

Stack Overflow用户
提问于 2014-05-23 20:56:11
回答 2查看 1.6K关注 0票数 16

设置

我们当前的Rails应用程序是由安装为引擎的子应用程序组成的。通常,这些引擎安装在主routes.rb文件中的子域上,如下所示

代码语言:javascript
复制
mount MySubApp::Engine => '/', as: :sub_app, constraints: {subdomain: 'sub_app'}

问题所在

MySubApproutes.rb文件中的路由在使用命名的_url帮助器时不能获取子域。

代码语言:javascript
复制
MySubApp::Engine.routes.draw do
  resources :foos
end

给了我们sub_app.foo_url(5),但结果是

http://.example.com/foos/5

当我们需要的时候

http://.example.com/foos/5

tl;dr

如何将引擎的安装约束传递到其命名的路由?

编辑:一种解决方法

虽然我仍然更喜欢一个更好的解决方案,但以下方法将会起作用。您可以将所有路径包装在每个子应用程序的routes.rb文件中,这些文件可以挂载在一个子域中,如下所示

代码语言:javascript
复制
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变量中,并做了一个包装器,这也不是干的。

EN

回答 2

Stack Overflow用户

发布于 2015-02-03 06:27:12

@Aaron不确定你是否解决过这个问题,但请查看

代码语言:javascript
复制
config.action_dispatch.tld_length

设置(在引擎的配置上)。我不确定它将如何与引擎反应,但在我们的例子中,它允许我们处理临时服务器的子子域的情况(因此,当我们在临时服务器上使用_url帮助器时,它正确地执行subdomain.staging.domain.com,而不是subdomain.domain.com)。

票数 1
EN

Stack Overflow用户

发布于 2014-06-23 07:31:22

查看guide,它说你可以通过以下方式完成

代码语言:javascript
复制
namespace :Engine do
  resources :controller, :methods
end

引擎只是将代码命名为空格

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23829884

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档