javascript - Rails 重定向不作为 HTML

标签 javascript ruby-on-rails redirect format

我有一个注册表单,如果注册成功,应该将用户重定向到他们的个人资料。如果注册失败,我想在不使用 Javascript 重新加载页面的情况下显示错误消息。

这是我的表单标题:

<%= form_for resource, as: resource_name, url: registration_path(resource_name), remote: true do |f| %>

我的注册 Controller :

def create
  respond_to do |format|
    if resource.saved
      sign_up(resource_name, resource)
      format.html { redirect_to current_employer }
    else
      format.js { render 'employers/sign_up_failure' }
    end
  end
end

所以失败有效。它在不重新加载页面的情况下在表单上方显示一条错误消息。 成功注册 format.html { redirect_to current_employer } 不工作

我的服务器日志显示重定向已处理:

Redirected to http://localhost:3000/employers/27

但看起来我的 Employers Controller 上的 show Action 被调用为 Javascript:

Processing by EmployersController#show as JS

因此,当我提交表单时,它不会将我重定向到我的个人资料页面。页面不闪烁。不过我已经登录了,所以如果我刷新页面,它会显示我已登录。

顺便说一句,我正在使用 Devise,我的注册 Controller 是对 Devise 使用的修正。

不确定为什么这不起作用。我取出了 format.js {} 部分,它仍然通过 JS 将 GET 调用发送到我的 Employers#Show 操作。我想要的是将重定向格式化为 HTML 并将我带到个人资料页面。

有什么想法吗?

解决方案 谢谢你的帮助。面对手掌,我完全忘记了 remote: true 是如何工作的。这是我实现的解决方案...希望有人觉得这很有用。

def create
  respond_to do |format|
    if resource.saved
      sign_up(resource_name, resource)
      #CHANGED
      format.js { render js: "window.location.href = '/#{resource_name}s/#{resource.id}'" }
    else
      format.js { render "#{resource_name}s/sign_up_failure" }
    end
  end
end

这也提高了代码的可重用性。

最佳答案

因为您在通过 ajax 提交的表单上有 remote: true,所以您还没有说明如果通过 ajax 提交并成功该怎么做。请求的格式是 js 而不是 html,这就是重定向不起作用的原因。

如果成功,您需要创建一个 create.js.erb 文件来提供服务,使用 window.location = "wherever you want to go"

通过 javascript 处理重定向

关于javascript - Rails 重定向不作为 HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24038798/

相关文章:

java - 如何使 Web 服务请求遵循重定向?

javascript - CKEditor - 对于每个具有类名的属性执行一些操作

ruby-on-rails - 自定义用will_paginate呈现的页面链接数?

php - 将 http 重定向到 https,但有异常(exception)

java - 如何在 response.sendRedirect() 之后发送 cookie?

ruby-on-rails - 在 OSX 上使用 Rails 在本地使用 SSL 进行开发

javascript - 使用 jQuery .filter() 选择 div 中的特定文本

javascript - 如何使用 slider 输入更改 Javascript 中的填充

javascript - Recorder.js 计算和偏移记录延迟

ruby-on-rails - Rails-ShareTribe。 npm 安装错误(ubuntu 16.04)