Trilhos - Redundant RESTFUL Recurso de map.resources? (Novo, criar)
-
07-07-2019 - |
Pergunta
Eu queria saber por que quando você criar rotas repousante em trilhos com map.resources gera ações de novo, criar, editar, atualizar ? Existe errado nada em declarar apenas uma ação para criar e update e fazer algo assim?
def create
unless post?
@user = User.new
else
redirect_to :action => 'index' if user.create(params[:user])
end
end
para que pudéssemos ter algo como
:GET users/create # to show the form (same as action - new)
:POST users/create # to create a new user
desde Restful é baseado em verbos, isto não seria a melhor abordagem para uso?
Obrigado por sua atenção
Solução
Eu acho que existem duas questões relacionadas, mas distintas aqui: os URLs expostas e os métodos do controlador são encaminhadas para. Desde qualquer um destes pode ser alterado de forma independente, eu vou enfrentá-los separadamente. Além disso, observe que eu vou falar um pouco vagamente, e estritamente sobre o REST como implementado no contexto do Rails.
Em termos de URLs externos, eu acho que ajuda a distinguir entre as URLs que compõem a API do sistema (:GET users/1
, :PUT users/1
, etc) e os URLs que estão lá apenas como uma conveniência para os seres humanos usando um navegador web (users/new
, users/5/edit
, etc). A API é toda sobre a buscar recursos ou interagindo com eles de alguma forma - estas são as URLs que outro computador está indo para uso ao interagir com o sistema. Esses URLs são tipicamente apenas o endereço do recurso que deseja interagir com, e, em seguida, você usa o método HTTP e os parâmetros para indicar o que é que você quer fazer (GET = me mostrar esse recurso, PUT = alterar este recurso, etc ). Os URLs de conveniência estão lá para mostrar um formulário para tornar mais fácil para um ser humano para usar a API. Você pode editar um usuário usando onda de digitar manualmente todos os parâmetros que você queria mudar e fazer um POST para usuários / 1, mas como um ser humano é muito mais fácil se você pode apenas usar um formulário .
Para olhar para os seus exemplos acima, então, :GET users/create
pode fazer sentido (e é bastante semelhante ao :GET users/new
que é o padrão), mas :POST users/create
seria cerca de traduzir "fazer uma nova de usuários / criar", que não faz muito sentido.
Quanto aos métodos do controlador ir, "novo" e "criar" estão realizando tarefas fundamentalmente diferentes, como deve esperamos ser claro a partir dos parágrafos anteriores. Um deles está exibindo um formulário, eo outro é a criação de um novo recurso. Você poderia sobrecarregar o mesmo método para fazer isso, é claro, mas sem uma razão convincente para fazê-lo, criando dois pequenos métodos independentes para lidar com duas pequenas tarefas independentes é provavelmente uma abordagem mais natural.