Impostazione
La nostra app Rails corrente è composta da app secondarie montate come motori. In genere questi motori sono montati su un sottodominio nel file principale routes.rb
come segueI percorsi nel motore montato sul sottodominio non ereditano i vincoli
mount MySubApp::Engine => '/', as: :sub_app, constraints: {subdomain: 'sub_app'}
il problema
rotte all'interno del file routes.rb
MySubApp
s' non fare ottenere il sottodominio quando si utilizzano i nominati _url
aiutanti. Per esempio il seguente in apps/my_sub_app/config/routes.rb
MySubApp::Engine.routes.draw do
resources :foos
end
ci dà sub_app.foo_url(5)
ma il risultato e '
http: // www .example.com/foos/5
quando vogliamo
http: // sub_app .example.com/foos/5
tl; dr
Come posso ottenere i vincoli di montaggio del motore passati ai suoi circuiti di nome?
EDIT: Una soluzione
Mentre io preferisco ancora una soluzione migliore, quanto segue funzionerà. È possibile avvolgere tutti i percorsi in ciascuna delle sub applicazioni routes.rb
file che potrebbe essere montato su un sottodominio in questo modo
MySubApp::Engine.routes.draw do
constraints Rails.application.routes.named_routes[:sub_app].constraints do
resources :foos
end
end
EDIT 2: (? Dal cancellato) Una molto meno desiderabile soluzione
Un commentatore puntato fuori puoi passare un'opzione subdomain
agli helper ma vorremmo evitare di dover usare sub_app.foo_url(5, {subdomain: 'sub_app'})
per ogni link cross sottodominio. Anche se abbiamo spostato il nome del sottodominio in una variabile ENV e fatto un wrapper, questo non è SECCO.
Sei alla ricerca di multi-tenancy? Se è così, c'è un Railscast per questo, ma è un professionista. http: // Railscasts.com/episodi/388-multi-tenancy-con-gli ambiti? view = asciicast. Personalmente, non ho mai lavorato con loro quindi non posso aiutarti Ho appena visto questo episodio un po 'di tempo fa e lo sto seguendo se è davvero quello che stai cercando. – MCB
Grazie a @MCB. Vedrò quel video quando posso e aggiornarlo se fornisce dei buoni suggerimenti. – Aaron
Ho appena visto il Railscast e non è quello che stiamo cercando: /. In realtà abbiamo più app che vivono come motori all'interno di un'app Rails. Ciascuno dei motori è montato con un vincolo di sottodominio ma lo stesso vincolo non viene trasferito ai singoli file di percorso dei motori. – Aaron