Czy istnieje sposób na zapewnienie domyślnej wartości dla pomocników adresów URL/ścieżek?Routing routingu: Podawanie wartości domyślnych dla pomocników ścieżek
Mam opcjonalny zakres owijania wokół wszystkich moich trasach:
#config/routes.rb
Foo::Application.routes.draw do
scope "(:current_brand)", :constraints => { :current_brand => /(foo)|(bar)/ } do
# ... all other routes go here
end
end
Chcę, aby użytkownicy mogli uzyskać dostęp do witryny za pomocą tych adresów URL:
/foo/some-place
/bar/some-place
/some-place
dla wygody, jestem utworzenie @current_brand
w moim ApplicationController
:
# 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
Tak daleko tak dobrze, ale teraz muszę zmodyfikować wszystkie wywołania *_path
i *_url
, aby uwzględnić parametr :current_brand
, mimo że jest opcjonalny. To jest naprawdę brzydkie, IMO.
Czy jest jakiś sposób, aby ułatwić programistom śledzenie ścieżki na @current_brand
?
A może lepszy sposób na zdefiniowanie zakresu w routes.rb
?
dzięki. To jest rozwiązanie, z którym skończyłem. Tam też jest mnóstwo gotch, takich jak konieczność ustawienia tego w mailerach, i hack, aby to zadziałało z rspec (wkleiłem w mojej własnej odpowiedzi) – u2622
Och, tak, przykro mi, że nie wskazuję tego . Cieszę się, że wspominałeś o tym dla kompletności. – CMW