Jestem na Railsach 2.3.3 i muszę utworzyć łącze, które wysyła żądanie postu.
Mam taki, który wygląda tak:
= link_to('Resend Email',
{:controller => 'account', :action => 'resend_confirm_email'},
{:method => :post} )
Co sprawia, że łącze JavaScript działa prawidłowo:
<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>'
Moja akcja kontrolera działa i nic nie jest ustawione:
respond_to do |format|
format.all { render :nothing => true, :status => 200 }
end
Ale kiedy klikam łącze, moja przeglądarka pobiera pusty plik tekstowy o nazwie „resend_confirm_email”.
Co daje?
ruby-on-rails
rest
link-to
user225643
źródło
źródło
Odpowiedzi:
UPDATE: To jest stara odpowiedź na starsze wersje Railsów. W przypadku Rails 4+, zobacz post Williama Dennissa poniżej.
Wydaje mi się, że typ treści odpowiedzi jest nieprawidłowy lub nieprawidłowo zinterpretowany w Twojej przeglądarce. Dokładnie sprawdź nagłówki http, aby zobaczyć, jakiego typu treści jest odpowiedź.
Jeśli jest to coś innego niż
text/html
, możesz spróbować ręcznie ustawić typ zawartości w następujący sposób:źródło
Od Rails 4
head
jest teraz preferowanyrender :nothing
. 1jest preferowany
Technicznie są takie same. Jeśli spojrzysz na odpowiedź na użycie cURL, zobaczysz:
Jednak wywołanie
head
stanowi bardziej oczywistą alternatywę dla wywołania,render :nothing
ponieważ jest teraz jawne, że generujesz tylko nagłówki HTTP.źródło
head 200
daje304
mi odpowiedź (na szynach 4.1.6). Konsola pokazuje kod statusu 200, ale chrome (panel sieciowy) pokazuje 304.render :nothing => true
Podejście zadziałało.