Estou no Rails 2.3.3 e preciso fazer um link que envie uma solicitação de postagem.
Eu tenho um que se parece com este:
= link_to('Resend Email',
{:controller => 'account', :action => 'resend_confirm_email'},
{:method => :post} )
O que torna o comportamento apropriado do JavaScript no link:
<a href="/account/resend_confirm_email"
onclick="var f = document.createElement('form');
f.style.display = 'none';
this.parentNode.appendChild(f);
f.method = 'POST';
f.action = this.href;
var s = document.createElement('input');
s.setAttribute('type', 'hidden');
s.setAttribute('name', 'authenticity_token');
s.setAttribute('value', 'EL9GYgLL6kdT/eIAzBritmB2OVZEXGRytPv3lcCdGhs=');
f.appendChild(s);
f.submit();
return false;">Resend Email</a>'
Minha ação do controlador está funcionando e definida para não renderizar:
respond_to do |format|
format.all { render :nothing => true, :status => 200 }
end
Mas quando eu clico no link, meu navegador baixa um arquivo de texto vazio chamado "resend_confirm_email."
O que da?
ruby-on-rails
rest
link-to
user225643
fonte
fonte
Respostas:
ATUALIZAÇÃO: Esta é uma resposta antiga para versões Rails legadas. Para Rails 4+, veja a postagem de William Denniss abaixo.
Parece-me que o tipo de conteúdo da resposta não está correto ou não foi interpretado corretamente em seu navegador. Verifique novamente os cabeçalhos http para ver o tipo de conteúdo da resposta.
Se não for
text/html
, você pode tentar definir manualmente o tipo de conteúdo desta forma:fonte
Desde Rails 4,
head
agora é preferívelrender :nothing
. 1é preferido sobre
Eles são tecnicamente iguais. Se você olhar a resposta para qualquer um usando cURL, verá:
No entanto, chamar
head
fornece uma alternativa mais óbvia para chamarrender :nothing
porque agora está explícito que você está gerando apenas cabeçalhos HTTP.fonte
head 200
resulta em uma304
resposta para mim (on rails 4.1.6). O console mostra 200 códigos de status, mas o cromo (painel de rede) mostra 304. Arender :nothing => true
abordagem funcionou.