Como o "Data-method = 'delete' do Rails 3 se degradam graciosamente?
Pergunta
O Rails 3 faz algumas coisas legais para tornar o JavaScript discreto, então eles fizeram coisas assim:
= link_to "Logout", user_session_path, :method => :delete
..converta para
<a href="/logout" data-method="delete" rel="nofollow">Logout</a>
Mas apenas me ocorreu .. Quando eu desligo o JavaScript, o método não é mais excluído, ele é o esperado. Então, existem planos para, ou há alguma maneira de permitir que estes data-
Atributos para se degradar graciosamente, para que o link ainda seja uma solicitação de exclusão?
Solução
A mudança que eles fizeram no Rails 3 com estes data-
Os atributos não eram sobre degradação graciosa, era sobre JavaScript discreto.
No Rails 2, especificando :method => :delete
Em um link, geraria um monte de JavaScript embutido que criaria um formulário com uma entrada oculta e enviasse o formulário. Era o mesmo que é agora: desligue o JavaScript e o padrão é uma solicitação GET. Como tal, apoiar o caso de nenhum JavaScript é o mesmo de antes.
Uma opção é usar um formulário/botão em vez de um link para que você possa incluir o método como um campo oculto, assim como o JavaScript do Rails 2. Outra opção é fazer com que a versão GET levá -lo a uma página intermediária que, por sua vez, possui o formulário/botão.
O benefício da nova abordagem é que ela é discreta. O JavaScript para alterar o verbo http existe em um arquivo externo e usa o data-
atributos para determinar a quais elementos deveriam ser anexados.
Outras dicas
Em vez de usar o link_to
Método - que exigiria que você use JavaScript para garantir que o método HTTP seja DELETE
-- use o button_to
método, que criará um formulário com um elemento de entrada oculto que informa aos Rails para tratar o método HTTP como DELETE
ao invés de POST
. Se necessário, você pode usar o CSS para estilizar o botão no formulário, para que pareça um link.
A única chance que você tem é definir um formulário. Um link não pode ser uma postagem com _method = "excluir" sem JavaScript ou por formulário.
Não é possível sem JavaScript.
Eu faço um pequeno plugin jQuery para converter data-method
Atributo do link para formas pseudo -ocultas (usado no projeto Laravel, por exemplo).
Se você quiser usá -lo: https://github.com/ifnot/restfulizerjs