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

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top