新手问题 请教一个关于 redirect_to 的问题

cckkll · 2016年08月04日 · 最后由 cckkll 回复于 2016年08月04日 · 2274 次阅读

项目中使用了 redirect_to,希望可以跳转到新页面,但是每次需要请求两次。

第一次控制台返回

Redirected to 重定向的页面
Completed 302 Found in 22ms (ActiveRecord: 10.1ms)

然后后面的请求就没了,页面不发生跳转,再次点击后控制台返回

Redirected to 重定向的页面
Completed 302 Found in 22ms (ActiveRecord: 10.1ms)

然后是新页面的处理请求

之后页面成功进行跳转。请问这是什么原因,为什么第一次 redirect_to 没有成功?我用的是 post 请求

你用了 Turbolinks 没?

如果有,同时 POST 请求又是 remote 方式的话,Turbolinks 会拦截 redirect_to 动作,改为直接无刷新更新 HTML

#1 楼 @huacnlee 问题解决了,多谢大神的回答,之前 form 表单直接提交,用的 a 标签的 click 事件处理 $('form').trigger('submit.rails'); 现在改成:

<%= form_tag xx_path, id: "xxx", onsubmit: "return form_submit()"  do %>
  <button href="#" type='submit'>xxx</button>
<% end %>

这样使用 form 自带的 submit 是可以成功跳转的。

我确实用了 Turbolinks,但是没使用 remote: true 的参数,您说的 Turbolinks 会拦截 redirect_to 动作,那为什么第二次会重定向成功呢?

另外,redirect_torender并没有结束当前 action,要 and return

#3 楼 @hww 多谢回复,但是我用的 rails 4.2.5.1 ,rails 4.0 以上版本就不需要 and return 了

#4 楼 @cckkll 请问你是在哪到的呢,查了一下文档,我只看到这段话:

ActionController/Base

#5 楼 @hww 看了之前的帖子,https://ruby-china.org/topics/21535 是我理解错了,and return 可以起到提醒作用,当然我也可以写成 return redirect_to some_path。但这并不是我问题的所在。应该是如一楼所说 Turbolinks 会拦截 redirect_to 动作

需要 登录 后方可回复, 如果你还没有账号请 注册新账号