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

时间:2013-12-11 21:30:07

标签: ruby-on-rails ruby-on-rails-4 ace-editor

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

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

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

# 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

有人有什么想法吗?可能是一些简单的东西,但我不能为我的生活想出这个。如果有任何其他相关信息我可以分享,请告诉我。

2 个答案:

答案 0 :(得分:1)

在您的特定情况下(快速播放中显示的情况),Chrome认为这会带来安全风险,因为您提交的<script>元素包含插入到网页的可呈现内容中的javascript 使用 [Rails'内置]异步javascript。

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

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

答案 1 :(得分:0)

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

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

请使用展示视图模板,展示操作和render_to_string中的日志更新您的答案。