2014-10-01 122 views
1

在RoR應用程序中,我希望索引資源可以下載xls文件。Ruby on Rails中的XLS格式資源

目前,我可以下載文件,但它需要一個鏈接,我喜歡這樣

link_to subscribers_path(:format => :xls) 

理想就像它自己的subscribers_path添加格式XLS創造了一個路徑,我不希望以索引的HTML格式查看視圖。 我的文件結構

/subscribers 
    index.html.erb 
    index.xls.erb 

和我的控制器代碼

def index 
    @subscribers = Subscriber.all 
    respond_to do |format| 
    format.html 
    format.xls #{send_data @subscribers.to_csv(col_sep: "/t")} 
    end 
end 

我試圖刪除HTML,看看它只是默認爲另一條路徑,但它說unknownformat錯誤。我也嘗試刪除index.html.erb文件以查看是否會回退到另一個具有相同名稱的格式,但這不起作用。

希望我的目標很明確:如何使用資源索引路徑與xls而不是html格式鏈接?

+0

我建議你檢查一下,如果rails支持xls開箱即用,我想不會。因此,未知的格式錯誤。要做你的建議,它會以某種方式添加xls作爲支持的格式。我還沒有做的事。 FYI:RoR使用請求的Accept頭中的mime類型來確定要呈現哪個模板。 – Andrew 2014-10-01 20:34:07

+0

我得到它來渲染我想要的輸出,但我怎樣才能讓它下載輸出而不是渲染? – Peege151 2014-10-01 20:38:56

回答

1

首先,澄清事情:是的,Rails完全支持XLS。

要使用它只是把下面一行config/initializers/mime_types.rb下:

Mime::Type.register "application/xls", :xls 

然後,筆者做了,改變格式XLS和創建index.xls.erb現在

,以回答你的問題,有幾種方法:

我想到的第一件事就是改變請求格式。在你的控制器中:

class SubscriberController < ActionController::Base 
    before_filter :change_format 

    def index 
    @subscribers = Subscriber.all 
    respond_to do |format| 
     format.xls #{send_data @subscribers.to_csv(col_sep: "/t")} 
    end 
    end 

    private 
    def change_format 
     request.format = "xls" 
    end 
end 

還應該有一打其他的方法來做到這一點,但我更喜歡這一個。