Named Routes in Models und anderen Klassen verwenden

Named Routes in Ruby on Rails sind eine feine Sache. Standardmäßig können sie im Controller und in Views verwendet werden, hier ist ihr Einsatzzweck vorgesehen. In seltenen Fällen kann es jedoch dazu kommen, dass man sie auch in einem Model oder einer anderen Klasse verwenden möchte. Das Erste was man feststellt ist, dass das nicht einfach geht.

Um die Named Routes in der Klasse verfügbar zu machen, muss das entsprechende Modul inkludiert werden:

  1. class App
  2.  
  3.   include ActionController::UrlWriter
  4.  
  5.   def initialize()
  6.     #…
  7.   end
  8. end

Wer lediglich relative Pfade ausgeben möchte, dem wird das genügen. Wer jedoch absolute Pfade mittels *_url Methoden nutzen möchte, der wird auf diese Fehlermeldung stoßen:

Missing host to link to! Please provide :host parameter or set default_url_options[:host]

Das Problem ist, dass der Host, für den die absoluten Pfade erstellt werden sollen, nicht bekannt ist. Dem kann abgeholfen werden, in dem man nach der include Anweisung die entsprechende Variable setzt:

  1. default_url_options[:host] = SITE_HOST

Wie man sieht, verwende ich die Konstante SITE_HOST, die ich in der config-Datei der entsprechenden Environment gepflegt ist. Der Einfachheit wegen, würde ich das auch so weiter empfehlen ;)

Share

Comments are closed.