2011-11-03 1 views
6

Sto sviluppando Rails 3.1.1.
Includere url_helpers nel modello causa un ArgumentError sul salvataggio del modello.include Rails.application.routes.url_helpers causa ArgumentError Mancante host da collegare a

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 (mancante host per collegare Si prega di fornire il: parametro host, default_url_options impostare [: host], oppure impostare: only_path true):

Un altro modello che comprendono anche url_helper doesn causa errore
Cosa c'è che non va?
Grazie in anticipo.

risposta

-2

Generalmente, questo errore si verifica quando proviamo a utilizzare gli helper di URL in luoghi in cui non è previsto l'utilizzo. Ad esempio, se provo a generare l'url del record della password dall'azione class mailer, utilizzando reset_password_url(@user), viene visualizzato lo stesso errore.

Assicurarsi di non utilizzare alcun metodo _path o _url all'interno della classe del modello. Inoltre non ritengo che sia una buona pratica per l'utente url_helpers all'interno del modello.

+5

Grazie per la risposta. In realtà il modello utilizza i metodi _path per passare l'auto url all'altro controller, ecco perché include l'helper dell'URL. Ho trovato la soluzione. Non includere ma chiamare in linea. 'Rails.application.routes.url_helpers.medium_path (self)' Ora funziona correttamente. – DIGITALSQUAD

3

è necessario passare l'host come argomento nella chiamata in cui si utilizza l'helper:

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

o un percorso diverso come questo:

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

dove AppConfig .host è l'host dipendente da environmnt (localhost: 300 per sviluppo env).