shallow rails generate example ruby-on-rails routing routes subdomain rails-engines

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