2011-11-03 67 views
6

我正在開發Rails 3.1.1。
在模型中包含url_helpers會導致ArgumentError保存模型。include Rails.application.routes.url_helpers cause ArgumentError Missing host to link to

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(缺少主機鏈接到請提供:主機參數,設置default_url_options [:主機],或設置:only_path爲true):

另一個模型,該模型還包括url_helper沒有按不會導致錯誤。
怎麼了?
在此先感謝。

回答

-2

這個錯誤通常會導致我們嘗試在不應該使用的地方使用任何url助手。例如,如果我嘗試使用reset_password_url(@user)來生成郵件類操作的密碼記錄url,我會得到相同的錯誤。

請確保您沒有在模型類中使用任何_path或_url方法。此外,我不認爲它是模型中用戶url_helpers的最佳實踐。

+5

感謝您的回覆。 實際上,模型使用_path方法將自身url傳遞給其他控制器,這就是爲什麼包括url helper。 我找到了解決方案。不包括但內聯。 'Rails.application.routes.url_helpers.medium_path(self)' 現在工作正常。 – DIGITALSQUAD

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 env)。