【问题标题】:include Rails.application.routes.url_helpers cause ArgumentError Missing host to link to包括 Rails.application.routes.url_helpers 导致 ArgumentError Missing host to link to
【发布时间】:2011-11-03 12:02:39
【问题描述】:

我正在开发 Rails 3.1.1。
在模型中包含 url_helpers 会导致保存模型时出现 ArgumentError。

class Medium < ActiveRecord::Base
  include Rails.application.routes.url_helpers

  .
  .
end

class MediaController < ApplicationController

  def create
    @medium = Medium.new(params[:medium])
    @media.save # => cause ArgumentError
  end
end

ArgumentError(缺少要链接的主机!请提供 :host 参数,设置 default_url_options[:host],或设置 :only_path 为 true):

另一个也包含 url_helper 的模型不会导致错误。
怎么了?
提前致谢。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3.1


    【解决方案1】:

    您需要在使用帮助程序的调用中将主机作为参数传递:

    Rails.application.routes.url_helpers.media_url(:host =&gt; "localhost:3000")

    或像这样的不同路线:

    Rails.application.routes.url_helpers.media_url(self, :host =&gt; AppConfig.host)

    其中 AppConfig.host 是取决于环境的主机(localhost:300 用于开发环境)。

    【讨论】:

      【解决方案2】:

      当我们尝试在不应该使用的地方使用任何 url 助手时,通常会导致此错误。例如,如果我尝试使用 reset_password_url(@user) 从邮件类操作生成密码记录 url,我会得到同样的错误。

      请确保您没有在模型类中使用任何 _path 或 _url 方法。此外,我认为在模型中使用 url_helpers 并不是最佳实践。

      【讨论】:

      • 感谢您的回复。实际上模型使用 _path 方法将 self url 传递给其他控制器,这就是为什么包括 url helper。我找到了解决方案。不包括但调用内联。 Rails.application.routes.url_helpers.medium_path(self) 现在可以正常工作了。
      猜你喜欢
      • 1970-01-01
      • 2022-12-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-04
      • 2022-10-12
      • 2018-02-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多