Rails操作显示它重定向但它没有

时间:2016-09-30 18:46:11

标签: ruby-on-rails ajax redirect render

我在Rails中有一个模板,我使用ajax将一些参数提交给我的控制器中的一个动作。

<script type="text/javascript">
         $(document).ready(function() {
    $("#subscribe-form").on('submit', function(e) {
                e.preventDefault();
                var form = $('#subscribe-form')
                if (!$(form).valid()) {
                    return false;
                }
                showProcessing();
                client.tokenizeCard({
                    number: $('input[card-info=number]').val(),
                    expirationDate: $('select[card-info=expiry_month]').val()+ "/" + $('select[card-info=expiry_year]').val(),
                    cvv : $('input[card-info=cvv]').val() 
     },function (err, nonce) {
                    console.log(nonce);

                    hideProcessing()
                   if(err){
                     $(".alert-danger").show().text("Couldn't process your card");
                     hideProcessing();
                     return;
                   }
                    console.log(nonce);

                   if ($("input[name='braintreeToken']").length == 1) {
                      $("input[name='braintreeToken']").val(nonce);
                   } else {
                      form.append("<input type='hidden' name='braintreeToken' value='" + nonce + "' />");
                   }
                    console.log(nonce);

                   var options = {
                      success: subscribeResponseHandler, 
                      complete:  hideProcessing,
                      contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
                      dataType: 'json',
                      //url: 'http/localhost:3000/subscription/create'
                   };
                   $(form).ajaxSubmit(options);
    });
               return false;
            });
        });
    </script>`

这就是我如何将params提交给我的&#34; action&#34;我的&#34;订阅&#34;控制器中的方法。

`                    <form  action="/subscription/create" method="post" id="subscribe-form">

这会进入我的创建操作。 我有这行代码

 if true then
    File.open("letssee.txt", 'w') { |file| file.write("eftase edw" )}

    customer.update(has_plan: true)
    respond_to do |format|

       format.html { redirect_to(new_professional_session_path, :notice => 'Feedback was successfully updated.') }
       format.js
    end

    #this also does not work
    #redirect_to(new_professional_session_path, format: :html)
  return
else 
        File.open("letssee.txt", 'w') { |file| file.write("den eftase" )}

  redirect_to :action=>'new'
  return
end

在我的终端中,它说专业/ sing_in正在渲染。 它说它已经成功地重定向到那里。 当然这条路线绑定到这条路径助手&#34; new_professional_session_path&#34;。 但它不会改变页面.. 它说它被重定向但它没有......

Sometikes虽然存在模板,但我也遇到了模板错误。 有什么建议吗?

修改 如果我把它放在顶部,   respond_to:html,:js

我明白了 ActionView :: MissingTemplate - 缺少模板订阅/创建,应用程序/创建{:locale =&gt; [:en],:formats =&gt; [:js,:html],:variants =&gt; [],:handlers = &gt; [:erb,:builder,:raw,:ruby,:coffee,:arb,:jbuilder]}。

2 个答案:

答案 0 :(得分:0)

您正在通过jQuery提交异步请求(处理为类型js),因此无法在您的控制器中重定向。

但是,您可以在js响应视图中重定向:

window.location= '<%= new_professional_session_path %>'

答案 1 :(得分:0)

您将其作为JSON发送,并且您的控制器尝试以JSON身份回答。

<强>控制器:

respond_to do |format|

   format.html { redirect_to(new_professional_session_path, :notice => 'Feedback was successfully updated.') }

   #add this one here
   format.json { render status: 200, json: new_professional_session_path }

   format.js
end

<强> $的Ajax

var options = {
  success: subscribeResponseHandler, 
  complete:  hideProcessing,
  contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
  dataType: 'json',
  //url: 'http/localhost:3000/subscription/create'
};

# HERE!
# I dnt know whats exactly callback will be here.
function subscribeResponseHandler(responseText, statusText) {
    window.location.href = 'https://localhost:3000/professional/sign_in'
}

$(form).ajaxSubmit(options)