2011-11-03 5 views
6

私はRails 3.1.1を開発中です。
モデルにurl_helpersを含めると、モデルの保存時にArgumentErrorが発生します。が含まれていますRails.application.routes.url_helpers cause 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を設定し、[ホスト]、または設定:trueにonly_path):

もdoesnのurl_helper含まれ、別のモデルエラーの原因になりません。
どういうところが間違っていますか?
ありがとうございます。

答えて

-2

このエラーは一般的に、使用する予定のない場所でURLヘルパーを使用しようとすると発生します。たとえば、メーラーのクラスアクションからパスワードレコードURLを生成しようとすると、reset_password_url(@user)を使用すると、同じエラーが発生します。

モデルクラス内で_pathまたは_urlメソッドを使用していないことを確認してください。さらに、モデル内のurl_helpersを使用するのはベストプラクティスとは言えません。

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

またはこのような異なるルート:

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

のAppConfig

+5

ご返信ありがとうございます。 実際には、_pathメソッドを使用して自己のURLを他のコントローラに渡すモデルです(urlヘルパーを含む)。 解決策が見つかりました。含まれていませんが、インラインで電話してください。 'Rails.application.routes.url_helpers.medium_path(self)' これで問題なく動作します。 – DIGITALSQUAD

3

は、あなたはヘルパーを使用している呼び出しの引数としてホストを渡す必要があります.hostはenvironemntに依存するホストです(開発環境の場合はlocalhost:300)。