Eu tenho um DashboardController
. Esta é a página onde o usuário visualiza seu perfil, configurações, etc.
Faz sentido para mim que dashboard seja singular.
Por enquanto, o dashboard também é a raiz. Enquanto o usuário estiver logado, ele pode acessar seu dashboard. Um usuário pode ter muitos children
, então adicionei uma ação para adicionar um filho ao controlador.
Eu defini as rotas assim:
resource :dashboard, only: [:show], path: 'dashboard' do
post :create_child, on: :collection
end
resolve("Dashboard") { [:dashboard] }
root "dashboard#show"
A raiz é mostrada como singular, mas o caminho para o controlador é plural, assim como a rota aninhada.
create_child_dashboard POST /dashboard/create_child(.:format) dashboards#create_child
dashboard GET /dashboard(.:format) dashboards#show
root GET / dashboard#show
Quero que as URLs sejam singulares. Como posso garantir isso?
Na verdade, é exatamente assim que deveria ser. O Rails não diferencia entre a nomeação de controladores para recursos normais ou singulares. Eles são sempre plurais.
Embora você possa não concordar com isso, é mais fácil ter apenas uma convenção de nomenclatura única para todos os controladores. E eu realmente o encorajaria a aprender as convenções antes de impor suas próprias ideias sobre elas.
Dito isso, é bem discutível se "dashboard" realmente é um recurso. Você não está realmente criando ou atualizando-o e ele realmente serve apenas como uma página inicial e agrupamento para um conjunto de rotas vagamente relacionadas. Você realmente deve defini-lo como um escopo ou namespace (se você também quiser aninhamento de módulo).
Além disso, você não está realmente definindo um recurso aninhado , mas apenas criando uma rota não idiomática. Um recurso aninhado no Rails é criado por POST para o caminho da coleção aninhada - por exemplo:
O último exemplo é com um recurso pai singular - sendo implícito que o usuário é o usuário atual (o que também torna o aninhamento um pouco redundante).
Se você adicionar
create_
,update_
ou verbos similares no caminho de uma rota Rails, você está fazendo errado. E um controlador não deve ser responsável por um recurso e seus filhos.Então eu escolheria algo como: