2012-03-29 5 views
5

Gibt es eine Möglichkeit, einen Standardwert für die URL/Pfad-Helfer bereitzustellen?Rails Routing: Geben Standardwerte für Pfadhelfer

Ich habe einen optionalen Rahmen um alle meine Routen Einwickeln:

#config/routes.rb 
Foo::Application.routes.draw do 

    scope "(:current_brand)", :constraints => { :current_brand => /(foo)|(bar)/ } do 
    # ... all other routes go here 
    end 

end 

Ich Mitglieder möchten die Website zugreifen können diese URLs verwenden:

/foo/some-place 
/bar/some-place 
/some-place 

Für Bequemlichkeit, ich bin Einrichten eines @current_brand in meinem ApplicationController: So

# app/controllers/application_controller.rb 
class ApplicationController < ActionController::Base 
    before_filter :set_brand 

    def set_brand                 
    if params.has_key?(:current_brand)           
     @current_brand = Brand.find_by_slug(params[:current_brand])    
    else                   
     @current_brand = Brand.find_by_slug('blah') 
    end 
    end 

end 

weit so gut, aber jetzt muss ich alle *_path und *_url Aufrufe ändern, um die :current_brand Parameter aufzunehmen, obwohl es optional ist. Das ist wirklich hässlich, IMO.

Gibt es eine Möglichkeit, die Weghelfer automatisch auf @current_brand abholen zu lassen?

Oder vielleicht eine bessere Möglichkeit, den Umfang in routes.rb zu definieren?

Antwort

8

Ich denke, Sie werden so etwas tun:

class ApplicationController < ActionController::Base 

    def url_options 
    { :current_brand => @current_brand }.merge(super) 
    end 

end 

Diese Methode aufgerufen wird jedes Mal automatisch url aufgebaut und es ist Ergebnis in die Parameter zusammengeführt wird.

Für weitere Informationen zu diesem Thema sehen: default_url_options and rails 3

+0

Dank. Dies ist die Lösung, mit der ich am Ende war. Da gibt es auch viele Probleme, wie zum Beispiel das Einrichten in den Mailern und ein Hack, um es mit rspec zu arbeiten (eingefügt in meiner eigenen Antwort). – u2622

+0

Oh, ja, es tut mir leid, dass ich nicht darauf hingewiesen habe . Freut mich, dass du es aus Gründen der Vollständigkeit erwähnt hast. – CMW

5

Neben CMW Antwort, um es mit rspec zu arbeiten, habe ich diesen Hack in spec/support/default_url_options.rb

ActionDispatch::Routing::RouteSet.class_eval do 
    undef_method :default_url_options 
    def default_url_options(options={}) 
    { :current_brand => default_brand } 
    end 
end