ruby-on-rails - generate - ruby on rails scaffold
Las rutas en el motor montadas en el subdominio no heredan las restricciones (2)
Aarón no está seguro de si alguna vez lo arreglaron, pero mire el
config.action_dispatch.tld_length
ajuste (en la configuración del motor). No estoy seguro de cómo reaccionará con los motores, pero en nuestro caso, nos permite manejar el caso de los subdominios para nuestro servidor de _url
(por lo tanto, cuando usamos los ayudantes _url
con el servidor de _url
, hace correctamente subdomain.staging.domain.com
, en lugar de subdomain.domain.com
).
Preparar
Nuestra aplicación Rails actual está hecha de sub-aplicaciones que se montan como motores. Por lo general, estos motores se montan en un subdominio en el archivo routes.rb
la siguiente manera:
mount MySubApp::Engine => ''/'', as: :sub_app, constraints: {subdomain: ''sub_app''}
El problema
Las rutas dentro del archivo routes.rb
no obtienen el subdominio cuando se usan los ayudantes _url
nombrados. Por ejemplo, lo siguiente en apps/my_sub_app/config/routes.rb
MySubApp::Engine.routes.draw do
resources :foos
end
nos da sub_app.foo_url(5)
pero da como resultado
http: // www .example.com / foos / 5
cuando queramos
http: // sub_app .example.com / foos / 5
tl; dr
¿Cómo puedo pasar las restricciones de montaje del motor a sus rutas nombradas?
EDITAR: una solución
Aunque prefiero una solución mejor, lo siguiente funcionará. Puede envolver todas las rutas en cada una de las aplicaciones secundarias routes.rb
archivos que podrían montarse en un subdominio como tal
MySubApp::Engine.routes.draw do
constraints Rails.application.routes.named_routes[:sub_app].constraints do
resources :foos
end
end
EDIT 2: una solución mucho menos deseable
Un comentarista (¿ya eliminado?) Señaló que puede pasar una opción de subdomain
a los ayudantes, pero nos gustaría evitar tener que usar sub_app.foo_url(5, {subdomain: ''sub_app''})
para cada enlace de subdominio cruzado. Incluso si cambiamos el nombre del subdominio a una var ENV y creamos un envoltorio, esto no es SECO.
Echa un vistazo a la guide que dice que puedes hacerlo por
namespace :Engine do
resources :controller, :methods
end
El motor es solo el espacio entre su código