2

在我的 Rails 4 应用程序中,我有一个模型需要建立到应用程序其他部分的链接。我正在使用Rails.application.routes.url_helpers.<path_name>生成此链接的 URL。我遇到的问题是这个生成的路径不包括嵌套路径。

在本地为应用程序提供服务localhost:3000并且所有路径都正常工作,但是当我部署到远程服务器时,它由 Nginx/Passenger 使用 root 提供服务http://<servername>/admin,并且路径不正确。举个例子,我想要的是payments_path解决"/admin/payments",但我得到了"/payments".

奇怪的是,当我payments_path直接在我的视图或我的应用程序的其他地方使用时,我得到了带有嵌套/admin路径的路径,即"/admin/payments".

任何人都知道为什么路径在视图中给了我两种不同的东西和Rails.application.routes.url_helpers

4

1 回答 1

0

我认为核心问题是视图/控制器级别的路径生成正在获取一些额外的元数据来正确生成路径。我最终找到了一篇关于模型内部路由主题的博客文章

博客的作者 (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' }

然而,在我添加了这个问题之后,我仍然无法生成完整的相对路径,但我可以让绝对 url 生成工作。所以我最终使用payments_url而不是payments_path.

我认为可能有一种方法可以让相对路径起作用,但这是我暂时的解决方法。

于 2014-02-04T19:06:19.143 回答