来自url_helpers的Rails路径与视图路径不同?

时间:2014-02-04 15:00:26

标签: ruby-on-rails ruby-on-rails-4 routes urlhelper

在我的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给我两个不同的东西?

1 个答案:

答案 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

我认为可能有办法让相对路径发挥作用,但这暂时是我的解决方法。