2013-10-10 21 views
0

我需要下載二進制數據。我已嘗試send_data方法,但它節省了整個 .html頁面。 我無法訪問控制器中的send_data方法,所以我在應用程序控制器中聲明瞭helper_method。導軌。如何通過send_data下載數據?

class ApplicationController < ActionController::Base 
    protect_from_forgery 
    helper_method :save_data 

    def save_data 
    send_data('Hello, pretty world :(', :type => 'text/plain', :disposition => 'attachment', :filename => 'hello.txt') 
    end 

end 

我做錯了什麼?謝謝。

+0

你在哪裏調用'save_data'? –

+0

@IdanArye在我的一個觀點。說網頁/ home.erb – user2422869

回答

1

有一個原因send_data只能從控制器使用 - 這是因爲從其他地方使用它是沒有意義的。 send_data執行的是而不是渲染視圖,所以如果您從視圖中調用它,在Ruby達到命令時它已經開始將渲染視圖寫入響應,這就是爲什麼您會獲得完整的HTML頁面。

您需要使其成爲控制器方法。一旦你有了它的路線,你可以使用該路線的助手將鏈接到你的視圖中的控制器方法 - 而不是文件數據本身。

1

您必須致電send_data而不是渲染視圖。將它作爲幫助方法並從視圖中調用它根本沒有任何意義。

簡而言之:你必須有send_data並沒有視圖的控制器的方法:你剛纔有一個正常的鏈接文本#你好路線

class TextController < ApplicationController 
    def hello 
    send_data('Hello, pretty world :(', 
       :type => 'text/plain', :disposition => 'attachment', :filename => 'hello.txt') 
    end 
end 

在您的視圖。