我正在开发的应用程序大量使用Rails services。我的问题是我需要获取应用的根网址,类似于在视图中使用root_url
的方式,但这并不适用于服务。除了在每个环境设置文件中输入url之外,有没有人知道这样做的方法?
修改
我尝试使用Rails.application.routes.url_helpers.root_url
,因为它建议在此处执行stackoverflow.com/a/5456103/772309,但它希望您将:host => ...
作为参数传递。这就是我想要找到的东西。
答案 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