Ruby on rails 获取Rails服务中的根url
我正在开发的应用程序大量使用。我的问题是我需要获取应用程序的根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之外,还有人知道这样做的方法吗
编辑
我尝试使用
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