在Rails服务中获取root_url

时间:2016-05-09 17:49:25

标签: ruby-on-rails ruby

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

修改

我尝试使用Rails.application.routes.url_helpers.root_url,因为它建议在此处执行stackoverflow.com/a/5456103/772309,但它希望您将:host => ...作为参数传递。这就是我想要找到的东西。

2 个答案:

答案 0 :(得分:2)

根据我从链接的“Rails”服务中读到的内容'文章,服务只是普通的老红宝石对象。如果是这种情况,那么您需要将root_url从控制器传递到服务对象的初始化程序。要扩展该文章中的示例:

UsersController

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

CreditCardService

class CreditCardService
  def initialize(params)
    ...
    @root_url = params[:root_url]
  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

答案 1 :(得分:0)

由于您反对将它放在您的环境文件夹中,您可以在App控制器中执行类似下面的操作

class ApplicationController < ActionController::Base
  def default_url_options
    if Rails.env.production?
      {:host => "myproduction.com"}
    else  
      {}
    end
  end
end