为什么我的Rails应用程序重定向到`data:,`?

因此,当我在Rails 4应用程序中保存记录时,会发生这种情况。 这是一些细节:

  • 我正在使用Ace编辑器 。
  • data属性不在我的模型或应用程序中。
  • 表单是标准的form_for (非远程)。
  • 该记录确实成功保存,但随后它重定向到这个奇怪的屁股URL。

更新的代码是标准的脚手架样板。

 # PATCH/PUT /pages/1 # PATCH/PUT /pages/1.json def update respond_to do |format| if @page.update(page_params) format.html { redirect_to @page, notice: 'Page was successfully updated.' } format.json { head :no_content } else format.html { render action: 'edit' } format.json { render json: @page.errors, status: :unprocessable_entity } end end end 

有人有主意吗? 可能是简单的事情,但我不能为我的生活想出这个。 如果有任何其他相关信息我可以分享,请告诉我。

在您的特定情况下(快速播放中显示的情况),Chrome认为这是一个安全风险,因为您提交的元素包含使用 [Rails'内置]插入到页面的可渲染内容中的javascript异步javascript。

为避免这种情况,您可以:

  1. 在提交表单之前使用客户端逻辑去除包装标记,然后在保存记录之前将它们重新添加到服务器上。
  2. 禁用Rails在此控制器中的更新操作的内置ajaxification,以便通过普通的旧HTML提交
  3. 在表单提交和查看show操作之间添加中间重定向页面

我相信这是因为你的@page show视图正在渲染转义的HTML和Javascript。 Chrome可能具有启发式function来分析页面并确定它是什么类型的文档。 由于它可能不是以开头,因此Chrome假定它是一个带有data: protocol的数据文件。 尝试渲染到字符串并在控制台上打印结果:

http://guides.rubyonrails.org/layouts_and_rendering.html#using-render

 puts render_to_string @page 

请参见4.1.1 http://guides.rubyonrails.org/security.html#redirection一节

 data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K 

请使用show view模板,show action和render_to_string的日志更新您的答案。