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