如果存在名称空间,则添加子域

时间:2014-05-12 08:51:10

标签: ruby-on-rails ruby routes

不确定我的主题标题是否正确,但这是我的问题

我有一个名为:admin的名称空间,所以它看起来像mysite.com/admin。在本节中,我有一些指向此命名空间内的控制器的链接。但由于我们有子域管理员和我的命名空间:admin,我希望routes.rb生成的所有链接都预先添加字符串admin.,所以链接看起来像admin.mysite.com/admin/some_other_path

我尝试向routes.rb添加约束,但这对我不起作用

3 个答案:

答案 0 :(得分:1)

  

但是因为我们有子域管理员和我的命名空间:admin,所以   我希望routes.rb生成的所有链接都可以预先添加   string admin。


<强>路线

在您的路线中,您应该拥有:

constraints({ subdomain: "admin" }) do
    namespace :admin do
        # routes here
    end
end

如果您想要没有管理命名空间的路径(I.E admin.domain.com/some_other_path),您可以这样做:

constraints({ subdomain: "admin" }) do
    namespace :admin, path: "" do
        # routes here
    end
end

-

<强>网址

使用网址时,您必须使用_url帮助程序(而不是_path)。我们昨天刚刚发现了这一点 - _path助手只能将相对路径附加到您的网址; _url为您提供了一个完全新鲜的网址

这意味着如果您的路线如下:

admin_root_path "admin/application#index, constraints => {subdomain: "admin"}

您将使用此路线助手调用此信息:

<%= link_to "Admin", admin_root_url %>

这将在调用链接等时为您添加所需的子域

答案 1 :(得分:0)

在管理员命名空间下的routes.rb中定义路由,如此

namespace :admin, path: '/', constraints: { subdomain: 'admin' } do
  constraints(Subdomain) do
    # your routes
  end
end

此块下定义的路由将始终位于admin的链接中,例如/admin/some_other_path

要将子域添加到管理命名空间,请查看此问题

Rails namespace admin on custom subdomain

答案 2 :(得分:0)

你可以这样做:

constraints subdomain: 'admin' do
  namespace :admin do
    # ...
  end
end