2013-12-11 90 views
2

因此,當我在Rails 4應用程序中保存一條記錄時,會發生這種情況。這裏有一些細節:爲什麼我的Rails應用程序重定向到`data:,`?

  • 我使用的是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 

任何人有什麼想法?可能有些簡單,但我不能爲我的生活找出這一個。讓我知道是否還有其他我可以分享的相關信息。

+0

我忘記了...我記錄了一個Quickcast,可以看到[這裏](http://quick.as/elxrckdb)。 –

+0

發生這種情況時可以添加日誌輸出嗎? – mechanicalfish

+1

你是如何設置'@ page'變量的?難道它不是一個Page類,這會導致第一個'redirect_to'不知道該去哪裏? – jstim

回答

1

在特定情況下(在快速鑄造所示),Chrome正在考慮這樣的安全風險,因爲要提交真實插入頁面渲染的內容使用 [Rails的一個<script>元素包含JavaScript內置]異步JavaScript。

爲了避免這種情況,你可以:

  1. 剔除使用客戶端邏輯提交表單前的包裝<script>標籤,然後回到保存記錄之前,將它們添加到服務器上。
  2. 禁用Rails的內置在該控制器的更新動作ajaxification,使其提交通過普通的舊的HTML
  3. 添加表單提交和查看之間的中介重定向頁面show動作
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日誌。

相關問題