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.