Я использую Rails 2.3.3, и мне нужно создать ссылку, которая отправляет почтовый запрос.
У меня есть такой:
= link_to('Resend Email',
{:controller => 'account', :action => 'resend_confirm_email'},
{:method => :post} )
Что приводит к соответствующему поведению JavaScript по ссылке:
<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>'
Действие моего контроллера работает и ничего не отображает:
respond_to do |format|
format.all { render :nothing => true, :status => 200 }
end
Но когда я щелкаю ссылку, мой браузер загружает пустой текстовый файл с именем «Resend_confirm_email».
Что дает?
ruby-on-rails
rest
link-to
user225643
источник
источник
Ответы:
ОБНОВЛЕНИЕ: это старый ответ для устаревших версий Rails. Для Rails 4+ см. Сообщение Уильяма Деннисса ниже.
Мне кажется, что тип содержимого ответа неверен или неправильно интерпретируется в вашем браузере. Дважды проверьте заголовки http, чтобы узнать, к какому типу контента относится ответ.
Если это что-то иное
text/html
, вы можете попробовать вручную установить тип контента следующим образом:источник
Начиная с Rails 4,
head
теперь предпочтительнееrender :nothing
. 1предпочтительнее
Технически они одинаковы. Если вы посмотрите на ответ с использованием cURL, вы увидите:
Однако вызов
head
предоставляет более очевидную альтернативу вызову,render :nothing
поскольку теперь явно указано, что вы генерируете только заголовки HTTP.источник
head 200
приводит к304
ответу для меня (на рельсах 4.1.6). Консоль показывает код состояния 200, но хром (панель сети) показывает 304.render :nothing => true
Подход сработал.