Il modello di risoluzione utilizzato per cercare le viste può contenere solo variabili registrate con la classe ActionView::LookupContext
. Il primo passo è quindi registrare una nuova variabile (subdomain
) con la classe LookupContext
. Si dovrebbe fare questo in un inizializzatore:
ActionView::LookupContext.register_detail(:subdomain) do
['default_subdomain']
end
Ora il LookupContext
sa circa la subdomain
, può essere incluso nel modello risolvere. Per ulteriori dettagli sulla modifica del modello per risolvere, vedere la ActionView::FileSystemResolver
documentation, ma in sostanza si dovrebbe includere quanto segue, anche in un inizializzatore:
ActionController::Base.view_paths = ActionView::FileSystemResolver.new(
Rails.root.join('app', 'views'),
':prefix/:action{.:locale,}{.:subdomain,}{.:formats,}{.:handlers,}'
)
Questo modello è poi passato a Dir.glob
(dopo le variabili :*
sono stati sostituiti). Il modello glob {.:subdomain,}
significa "o .:subdomain
o nulla", che fornisce il fallback a un file di visualizzazione senza sottodominio se non si trova il file con un sottodominio.
Il passo finale è quello di aggiornare il tuo ApplicationController
per passare il sottodominio al LookupContext
:.
class ApplicationController < ActionController::Base
def details_for_lookup
{:subdomain => [request.subdomain]}
end
end
(La risposta è stata per lo più capito leggendo il codice sorgente, alcune di queste caratteristiche non sono documentate Era testato con Rails 3.2.5)
grazie! quello era _exacly_ ciò di cui avevo bisogno. – user1105595
Contento di aver potuto aiutare, e benvenuti a Stack Overflow. Se una risposta risolve il tuo problema, devi contrassegnarlo come accettato, maggiori informazioni su come e perché qui: http://meta.stackexchange.com/a/5235 – georgebrock