Javascript Rails重定向不作为HTML进行
我有一个注册表单,如果注册成功,应该将用户重定向到他们的个人资料。如果注册失败,我想在不使用Javascript重新加载页面的情况下显示一条错误消息 这是我的表格标题:Javascript Rails重定向不作为HTML进行,javascript,ruby-on-rails,redirect,format,Javascript,Ruby On Rails,Redirect,Format,我有一个注册表单,如果注册成功,应该将用户重定向到他们的个人资料。如果注册失败,我想在不使用Javascript重新加载页面的情况下显示一条错误消息 这是我的表格标题: <%= form_for resource, as: resource_name, url: registration_path(resource_name), remote: true do |f| %> 所以失败是有效的。它在表单上方显示错误消息,而不重新加载页面。 成功注册的format.html{redir
<%= form_for resource, as: resource_name, url: registration_path(resource_name), remote: true do |f| %>
所以失败是有效的。它在表单上方显示错误消息,而不重新加载页面。
成功注册的format.html{redirect\u to current\u employer}
无效
我的服务器日志显示已处理重定向:
Redirected to http://localhost:3000/employers/27
但看起来我的雇主控制器上的显示动作被称为Javascript:
Processing by EmployersController#show as JS
因此,当我提交表单时,它不会将我重定向到我的个人资料页面。页面不会闪烁。但我已登录,因此如果我刷新页面,则表明我已登录
顺便说一句,我正在使用Deave,我的注册控制器是Deave使用内容的修正
不知道为什么这不起作用。我去掉了format.js{}
部分,它仍然通过js向我的雇主发送GET调用#Show action。我想要的是将重定向格式化为HTML,并将我带到配置文件页面
有什么想法吗
解决方案
谢谢你的帮助。脸上的手掌,我完全忘记了遥控器的工作原理。这是我实现的解决方案。。。希望有人觉得这很有用
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文件,通过javascript使用
window.location=“where You want to go”
处理重定向。您的表单上有remote:true
。表单将始终通过Ajax而不是浏览器的正常提交机制提交,因此format.html将永远无法工作。您必须通过javascript处理重定向
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