【问题标题】:Rails paths from url_helpers are different from view paths?来自 url_helpers 的 Rails 路径与视图路径不同?
【发布时间】:2014-02-04 15:00:25
【问题描述】:

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

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

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

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

【问题讨论】:

  • Rails.application.routes.url_helpers.admin_payments_path 呢?
  • NoMethodError for admin_payments_path
  • 你能告诉我们你的路线文件吗? Sergio 发布的内容应该是正确的
  • routes.rb 中的相关行,resources :payments。没有在那里做任何奇怪的事情。为什么要在路径名前添加 admin?

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


【解决方案1】:

我认为核心问题是视图/控制器级别的路径生成正在获取一些额外的元数据来正确生成路径。我最终找到了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' }

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-27
    • 2012-01-31
    • 2014-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-18
    • 2013-12-09
    相关资源
    最近更新 更多