在我的Rails 4应用程序中,我有一个模型,需要建立到应用程序其他部分的链接。我正在使用Rails.application.routes.url_helpers.<path_name>
生成此链接的网址。我遇到的问题是这个生成的路径不包括嵌套路径。
本地应用程序服务于localhost:3000
并且所有路径都正常工作,但是当我部署到远程服务器时,它使用根http://<servername>/admin
由Nginx / Passenger提供服务且路径不正确。举个例子,我想要payments_path
解析为"/admin/payments"
,但我得"/payments"
。
奇怪的是,当我在我的视图或我的应用中的其他位置直接使用payments_path
时,我会获得带有嵌套/admin
路径的路径,即"/admin/payments"
。
任何人都知道为什么路径在视图和Rails.application.routes.url_helpers
给我两个不同的东西?
答案 0 :(得分:0)
我认为核心问题是视图/控制器级别的路径生成正在获取一些额外的元数据以正确生成路径。我最终找到了blog post dealing with the subject of routes inside models。
博客作者(Adam Hawkins)建议采用以下方法将路径生成添加为模型的关注点,
module Routing
extend ActiveSupport::Concern
include Rails.application.routes.url_helpers
included do
def default_url_options
ActionMailer::Base.default_url_options
end
end
end
class UrlGenerator
include Routing
end
这个问题捎带了ActionMailer配置,在我的例子中,
config.action_mailer.default_url_options = { host: 'https://dev.<domain-name>.com/admin' }
然而,在我添加了这个问题后,我仍然无法生成完整的相对路径,但我可以让绝对网址生成工作。所以我最终使用的是payments_url
而不是payments_path
。
我认为可能有办法让相对路径发挥作用,但这暂时是我的解决方法。