Roteamento aninhado com um escopo parametrizado

O roteador Rails é incrível. Mas de vez em quando encontro algo que quero fazer e não é imediatamente óbvio. Neste caso específico, eu queria ter um recurso aninhado simples com um escopo.

ie

/foos/:foo_id/:scope/bars/:id

Parece fácil, certo?

Bem, aqui estava minha primeira tentativa:

resources :foos do
member
do
scope
":scope" do
resources
:bars
end
end
end

Mas, para minha surpresa, isso gera o seguinte:

/foos/:id/:scope/bars/:id

Ops! Isso não é bom. Em seu controlador, você obterá apenas um desses: parâmetros de id. Na verdade, acho que pode ser um bug. Espero que, se eu tiver alguns ciclos, eu possa tentar consertá-los. No mínimo, um teste expondo o comportamento observado para ver se isso é intencional.

De qualquer forma, como solução alternativa, consegui fazer o seguinte depois de vasculhar a fonte.

resources :foos do
resources
:bars, path: ":scope/children"
end

Eu não estava ciente da opção de caminho para recursos e certamente não sabia que você poderia parametrizar o caminho. Espero melhorar um pouco a documentação depois do trabalho.

*** observação: Na produção, provavelmente é uma boa ideia adicionar uma restrição personalizada para limitar os escopos parametrizados permitidos – especialmente se você estiver usando esse parâmetro como … não sei … um escopo.