如何根据REMOTE_USER更改Rails路线

时间:2018-08-10 17:48:13

标签: ruby-on-rails

我有一个Rails 4.1应用程序。我想根据环境变量/home更改REMOTE_USER的工作方式。

我的routes.rb文件中有这个文件:

get "home" => Utility.home_page(ENV['REMOTE_USER'])

函数Utility.home_page返回app1#homeapp2#homehelps#index之一,具体取决于其自变量的值。

但是,看来routes.rb仅被加载一次,因此所有用户最终都被定向到同一应用程序。

2 个答案:

答案 0 :(得分:0)

collect_list实际上是一个routes.rb文件,因此您可以在此处执行所需的所有验证。

如果您需要根据环境变量的值更改 home 路径,则可以在ruby中执行以下操作:

routes.rb

答案 1 :(得分:0)

有两个可能的问题:

  1. 您正试图从为服务器应用程序而非每个请求设置的ENV变量中获取REMOTE_USER值。服务器启动后,ENV ['REMOTE_USER']永不更改,并且对所有请求和用户都相同。

    您似乎需要从请求环境中获取值:request.env["REMOTE_USER"]

  2. 启动应用程序后,Utility.home_page(ENV['REMOTE_USER'])仅计算一次。您需要根据请求对lambda表达式使用约束。

解决方案可能是这样的:

get "home", to: "app1#home", constraints: lambda { |request| Utility.home_page(request.env['REMOTE_USER']) == "app1#home" }

get "home", to: "app2#home", constraints: lambda { |request| Utility.home_page(request.env['REMOTE_USER']) == "app2#home" }

get "home", to: "helps#index", constraints: lambda { |request| Utility.home_page(request.env['REMOTE_USER']) == "helps#index" }

在这种情况下,我将更改Utility api使其工作如下:

get "home", to: "app1#home", constraints: lambda { |request| Utility.home_page?(:app1, request.env['REMOTE_USER']) }
get "home", to: "app2#home", constraints: lambda { |request| Utility.home_page?(:app2, request.env['REMOTE_USER']) }
get "home", to: "helps#index", constraints: lambda { |request| Utility.home_page?(:helps, request.env['REMOTE_USER']) }