我有一个使用 form_for 和 remote: true 设置的表单。
<%= form_for(@vocab, url: user_vocab_path(@user, @vocab), remote: true) do |f| %>
正如预期的那样,vocab Controller 中的相应更新操作将请求作为 JS 处理:
Processing by VocabsController#update as JS
然后神秘的事情发生了。在有效数据的情况下,我想重定向用户。使用标准 HTML 请求。我猜到了。像这样应该可以工作,但事实并非如此:
def update
@user = current_user
@vocab = @user.vocabs.find(params[:id])
respond_to do |format|
format.js { redirect_to home_user_path(@user), format: 'html' }
end
end
UsersController 中的 home 操作也将请求作为 JS 处理。带或不带重定向中指定的格式。可以吗?解释一下为什么?
我阅读了所有 Rails 指南和 API,但没有从中得到任何东西。
最佳答案
看起来您正在尝试使用 html 文件响应 js 请求。我认为您基本上希望远程表单具有非远程行为(重定向)。因此,将 format.js
更改为 format.html
并删除 remote: true
应该是一个解决方案。如果您想进行前端重定向(这意味着必须发送另一个请求),您可以尝试使用
format.js { 内联渲染:“window.location.href = '#{home_user_path(@user)}'”}
关于javascript - respond_to 和 redirect_to 未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28630789/