Rails 5:表单如何使用自定义HTTP标头提交?

Tod*_*odd 15 webforms ruby-on-rails http-headers ruby-on-rails-5

我似乎无法找到任何有关如何在Rails 5中使用自定义标头提交webform的信息.我希望我发送PUT请求的URL也会收到一些自定义标头.我很惊讶form_for没有争论.

我可以通过将表单提交到我在那里修改标题的操作来完成此操作,例如,request.headers['my-header'] = 'xyz'.然后我必须PUT在这个"中间"控制器动作中提出请求,我觉得这个额外的步骤是笨重和非常规的.

我也可以使用jQuery绑定到提交点击,并在通过JavaScript添加标题后提交表单数据.在这个过程中,我宁愿不涉及另一层(即JS).

我宁愿不做.有没有办法我可以使用Rails表单助手(或一些控制器助手)为表单提交的请求添加一些自定义标头?

roh*_*han 7

Rails没有任何标签允许我们这样做,因此无法为您的请求添加自定义标头.

事实上,你不能在没有xhr插件的情况下在html表单中设置自定义标题,你必须将它与ajax一起使用.像这样: -

<%= form_tag("/your_url", method: :post, :remote => true, :html => { id: "form-id" }) do |f| %>
    ...your form here...
<% end %>
Run Code Online (Sandbox Code Playgroud)

然后你ajax代码: -

$('#form-id').submit(function() {
    var valuesToSubmit = $(this).serialize();
    $.ajax({
        type: "POST",
        url: $(this).attr('action'),
        data: valuesToSubmit,
        headers: { 'Xmlrpc-Token': 'value' , 'Token': 'another_value'}
    }).success(function(response){
        //success code
    });
    return false;
});
Run Code Online (Sandbox Code Playgroud)

仅使用remote:rails中的true将进行ajax调用,但您希望能够使用上面的代码对其进行自定义.