include Rails.application.routes.url_helpers导致ArgumentError缺少主机链接到

时间:2011-11-03 12:02:39

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

我正在开发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的模型不会导致错误 怎么了?
提前谢谢。

2 个答案:

答案 0 :(得分:3)

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

Rails.application.routes.url_helpers.media_url(:host => "localhost:3000")

或者像这样的其他路线:

Rails.application.routes.url_helpers.media_url(self, :host => AppConfig.host)

其中AppConfig.host是主机,取决于environemnt(localhost:300 for development env)。

答案 1 :(得分:-2)

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

请确保您未在​​模型类中使用任何_path或_url方法。此外,我不认为在模型中使用url_helpers是最佳做法。