Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 获取Rails服务中的根url_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 获取Rails服务中的根url

Ruby on rails 获取Rails服务中的根url,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在开发的应用程序大量使用。我的问题是我需要获取应用程序的根url,类似于在视图中使用根url的方式,但这在服务中不起作用。除了在我的每个环境设置文件中输入url之外,还有人知道这样做的方法吗 编辑 我尝试使用Rails.application.routes.url\u helpers.root\u url,正如它在stackoverflow.com/a/5456103/772309中建议的那样,但它希望您将:host=>…作为参数传入。这就是我想要找到的。既然你反对将它放在你的环境文件夹中,

我正在开发的应用程序大量使用。我的问题是我需要获取应用程序的根url,类似于在视图中使用
根url
的方式,但这在服务中不起作用。除了在我的每个环境设置文件中输入url之外,还有人知道这样做的方法吗

编辑


我尝试使用
Rails.application.routes.url\u helpers.root\u url
,正如它在stackoverflow.com/a/5456103/772309中建议的那样,但它希望您将
:host=>…
作为参数传入。这就是我想要找到的。

既然你反对将它放在你的环境文件夹中,你可以在你的应用程序控制器中执行以下操作

class ApplicationController < ActionController::Base
  def default_url_options
    if Rails.env.production?
      {:host => "myproduction.com"}
    else  
      {}
    end
  end
end
class ApplicationController“myproduction.com”}
其他的
{}
结束
结束
结束

根据我从链接的“Rails服务”文章中读到的内容,这些服务只是普通的旧ruby对象。如果是这种情况,则需要将
根url
从控制器传递给服务对象的初始值设定项。要扩展该文章中的示例,请执行以下操作:

用户控制器

class UsersController < ActionController::Base
  ...
  private
  ...

  def register_with_credit_card_service
    CreditCardService.new({
      card: params[:stripe_token],
      email: params[:user][:email],
      root_url: root_url
    }).create_customer
  end
end
编辑:利用Rails.application.config的替代解决方案

class UsersController < ActionController::Base
  before_filter :set_root_url

  def set_root_url
    Rails.application.config.root_url = root_url
  end
end

class CreditCardService
  def some_method
    callback_url = "#{Rails.application.config.root_url}/my_callback"
  end
end
class UsersController
可能重复@daveschweiguth,我尝试使用
Rails.application.routes.url\u helpers.root\u url
,正如它建议的那样,但它希望您将
:host=>…
作为参数传入。这就是我想要找到的。可能会有帮助。@Daveshweisguth我试过了,但我遇到了与第一个评论员相同的问题——“我在本地机器上尝试了您的简易解决方案,它返回了我的机器名,而我想得到‘localhost:3000’”。这个答案如何?我并不反对把它放在我的environments文件夹中,只是希望有一个本地Rails方法可以调用来获取主机名。看起来我的环境设置是一个不错的选择。这绝对是一种方法,是的,服务只是普通的ruby对象。我当前用例的问题是,我必须将它通过多个服务传递到一个单独的服务器,然后再返回,这显然不是最优雅的解决方案。不过,你的答案在大多数情况下都是最有效的。明白了,然后看看我的编辑。我再次使用UserController,因为这是本文的原始示例。我通常从ApplicationController开始,并让所有其他控制器扩展它。我将在那里添加before_过滤器,它将为所有路由设置config.root_url。
class UsersController < ActionController::Base
  before_filter :set_root_url

  def set_root_url
    Rails.application.config.root_url = root_url
  end
end

class CreditCardService
  def some_method
    callback_url = "#{Rails.application.config.root_url}/my_callback"
  end
end