Recursos de roteamento com e sem blocos de membros

Normalmente, eu declaro rotas do Rails para ações para recursos singulares em um bloco de membro da seguinte maneira:

resources :blog_posts do
member
do
post
'tag'
end
end

isso faz com que as rotas rake produzam o seguinte:

tag_blog_post POST   /blog_posts/:id/tag(.:format)  blog_posts#tag

Mas hoje me deparei com uma situação em que a ação para um recurso singular não estava em um bloco de membros:

resources :blog_posts do
post
'tag'
end

o que fez com que as rotas rake produzissem isso:

blog_post_tag POST   /blog_posts/:blog_post_id/tag(.:format) blog_posts#tag

Existem duas diferenças importantes nas rotas produzidas:

  • Quando no bloco de membro, o recurso é identificado simplesmente pelo parâmetro: id, enquanto sem o bloco de membro um parâmetro mais detalhado: blog_post_id, que inclui o nome do modelo, é necessário.

  • Quando no bloco de membro, a ação vem no início do auxiliar de rota (tag_blog_post), enquanto sem o bloco de membro ela é prefixada (blog_post_tag).

As diferenças são interessantes. Eu me pergunto se há uma razão pela qual eles operam dessa forma, ou se é apenas um curioso efeito colateral da implementação.