为rails app重新映射root

时间:2016-07-08 22:25:42

标签: ruby-on-rails routes url-routing

我在内部服务器上安装了Ruby on Rails应用程序,并且需要应用程序root看起来像一个目录。

校园IT已安排好所有定向到http://myinstitution.edu/mydepartment/servicename的请求都会路由到http://myinternalserver.edu/

这会导致错误:没有路线匹配[GET]“/ mydepartment / servicename”

我尝试修改routes.rb:

match "/mydepartment/servicename", to: "home#index", via: [:get, :post]

但是这会导致错误:未定义的局部变量或方法`root_url'...

我添加了

get '/mydepartment/servicename' => redirect("/")

但是这会导致所有请求被重定向到http://myinstitution.edu/#而不是将请求发送到我的服务器的目录

如何让我的实际服务看起来像是在目录库中?我之前没有使用过RoR。感谢。

在我搞砸之前的原始routes.rb: 在我搞砸之前这是原版:

Rails.application.routes.draw do
  root to: "catalog#index"
  blacklight_for :catalog
  Blacklight::Marc.add_routes(self)
  devise_for :users
end

1 个答案:

答案 0 :(得分:0)

routes.rb中,您可以使用范围来更轻松地定义路线:

Rails.application.routes.draw do
  root to: "catalog#index"
  blacklight_for :catalog
  Blacklight::Marc.add_routes(self)
  devise_for :users

  scope "/mydepartment/servicename" do
    match '/', to: "home#index", via: [:get, :post]
    # ... more routes
  end
end

您仍然需要root to:指向有效的控制器和操作。您收到的错误undefined local variable or method 'root_url' for ...是由于routes.rb中缺少此条款。

由于您正在使用Devise,因此还需要调整其路线。有关详细信息,请参阅How To: Change the default sign_in and sign_out routes