Ruby on rails 在控制器中检测基本url?

Ruby on rails 在控制器中检测基本url?,ruby-on-rails,ruby-on-rails-6,Ruby On Rails,Ruby On Rails 6,我们如何在控制器中检测根/基url 我正在运行一个函数,需要知道在它完成后将用户返回到哪里,我希望它在dev和prod中工作。目前,如果我只使用域名,那么在开发中它将用户返回到实际的网站(即,而不是http://localhost:3000),这是不可取的(在dev中,用户应该返回到dev;他们不应该链接到站点的prod版本) 因此,我希望代码返回: https://www.example.com在生产和销售中 http://localhost:3000正在开发中 例子 下面是一个简化的示例

我们如何在控制器中检测根/基url

我正在运行一个函数,需要知道在它完成后将用户返回到哪里,我希望它在dev和prod中工作。目前,如果我只使用域名,那么在开发中它将用户返回到实际的网站(即,而不是http://localhost:3000),这是不可取的(在dev中,用户应该返回到dev;他们不应该链接到站点的prod版本)

因此,我希望代码返回:

  • https://www.example.com
    在生产和销售中
  • http://localhost:3000
    正在开发中
例子 下面是一个简化的示例,我需要将
refresh\u url
的值设置为:

  • https://www.example.com/reauth
    在生产和销售中
  • localhost:3000/reauth
    正在开发中
注意这里的关键是url的后一部分是相同的,但是第一部分(基本url)是生产中的实际域,而localhost是开发中的

Stripe::AccountLink.create({
刷新url:'https://www.example.com/reauth'
})
到目前为止我所知道的 我看过:

  • (和),以及
  • (返回
    NameError:main:Object的未定义局部变量或方法'request'
我计算出这是可行的

i、 e

注:

  • 这将返回不带尾随正斜杠的url
  • 这在rails控制台中不起作用
作为将来的参考,下面是我要解决的问题,根据应用程序是在dev中运行还是在prod中运行,给出正确的基本url:

base\u url=(!Rails.const\u defined?'Console')?(request.base\u url):“http://localhost:3000"

它在控制台中不起作用,因为请求对象仅在控制器中可用。@MibraDev感谢您让我知道。这是因为请求对象是在应用程序启动时生成的还是出于其他原因?是否有一种合理的模式来测试rails控制台中不存在的对象(rails控制台是我测试代码的“目标”,因此这个问题花费的时间比需要解决的时间要长,因为我无法在控制台中获得
request.base\u url
).真的很感激advice@stevecrequest对象是当前HTTP请求的表示形式。控制台中没有当前HTTP请求。在控制器操作(或路由器、中间件类,可能还有其他一些罕见的情况)的上下文中,只有一个HTTP请求您可以使用像ByEbug这样的调试器,在一些控制器代码的中间获得交互式控制台环境,然后在那里进行测试。尽可能地简化这个问题,同时提供问题所需的尽可能多的细节,完全可以理解。我希望可以重新考虑一下看到<代码>根>代码> URL或查看一个。使用命名帮助程序创建新路由。除非example.com不是您的服务器,否则您不需要使用
.base\u url
request.base_url