如何将子域路由到routes.rb中的rails应用程序?

时间:2017-04-13 18:17:24

标签: ruby-on-rails

我有一个网址https://www.openhub.net,这是我的rails 4.2.7应用。我在另一个系统https://code.openhub.net/上有一个单独的子域。如果你碰上第二个链接,这将重新路由到已停止的页面。托管code.openhub.net网址的内容将被取消,并将重新发送到openhub.net。所以我要做的是,当有人试图转到code.openhub.net我的rails应用程序openhub.net将提供静态页面。问题是我无法概念化它是如何工作的。例如,以下是路由下的rails文档片段。

  

3.9基于请求的约束   您还可以基于Request对象上返回String的任何方法来约束路由。

     

您指定基于请求的约束的方式与指定a的方式相同   段约束:

get 'photos', to: 'photos#index', constraints: { subdomain: 'admin' }

You can also specify constraints in a block form:

namespace :admin do
  constraints subdomain: 'admin' do
    resources :photos
  end
end
  

通过调用Request对象上的方法来请求约束   与哈希键同名,然后比较返回值   使用哈希值。因此,约束值应该匹配   对应的Request对象方法返回类型。例如:   约束:{subdomain:'api'}将匹配api子域名   预期,但使用符号约束:{subdomain :: api}将   不,因为request.subdomain将'api'作为String返回。

我理解文档的内容,但当我尝试将此代码付诸实践时,我感到很难过。这是我的routing.rb文件:

get '???', to: '???', constraints: { subdomain: 'code' }

我了解网址的子域约束部分是代码,getto会是什么?我怎么知道会得到什么?我是否只需替换将get code.openhub.net路由的CodeController#index?以前有人试过这样的事吗?从文档中我看到请求对象有一个我可以调用的original_url方法。有没有办法可以利用这个?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

这应该有效:

function firstlast($var,$seperator) {
     $varr = explode($seperator, $var);
     $first = current($varr);
     $last = end($varr);
     return $first.'_'.$last;
}
$seperator='_';
$old = 'marine_camp_se_bell';
$new = firstlast($old, $seperator);
echo $new;

这会将get '/', to: 'code#index', constraints: { subdomain: 'code' } 的请求转发到https://code.openhub.net/中的index方法。

但是,该网址仍会显示CodeController。如果您不想这样,您可以尝试重定向,如下所示:

https://code.openhub.net/