2015-04-05 25 views
0

在導軌3/4中,可以通過在模型中定義方法self.to_csv並在控制器中添加format.csvrespond_to來導出至csv。點擊link_to "CSV", index_path(format: "csv")開始導出。導出再次調用相同的動作並在csv中呈現。如何在rails 3/4中將當前搜索頁導出到csv?

我們的問題是如何使用可以將當前頁面導出到csv。用戶可能會開始搜索,然後決定將當前頁面導出到csv(無需重新搜索csv導出)。有沒有用戶可以這樣做的方法?

UPDATE:

#for csv download 
    respond_to do |format| 
    format.html {@query = @query.page(params[:page]).per_page(30)} 
    format.csv do 
     send_data @query.to_csv 
     @csv = true 
    end 
    end 

這裏是self.to_csv的模型的例子:

def self.to_csv 
     CSV.generate do |csv| 
     #header array 
     header = ['id', 'action', 'resource', 'brief_note', 'last_updated_by_id', 'role_definition_id', 'sql_code', 'masked_attrs', 'rank', 'created_at', 'updated_at']   
     csv << header 
     all.each do |config| 
      #assembly array for the row 
      ..... 
      #inject to csv 
      csv << row 
     end 
     end 
    end 

回答

4

如果你的頁面是考慮到搜索參數CSV出口的控制器代碼 例子(比方說一個@query變量),你可以直接調用完全相同的控制器,但要求使用CSV格式而不是HTML。

讓我們假設你列出用戶在/用戶的路線,並有一個搜索參數,如:

/users?query=smith 

您可以創建一個鏈接生成:

/users.csv?query=smith 

這將回調相同的控制器,只是改變格式。這可以使用如下代碼:

link_to "CSV", index_path(format: "csv", :query => @query) 
+0

@@ Martin,如何在生成csv時檢索self.to_csv中的@query?我是否需要將變量.to_csv添加爲self.to_csv(查詢)? – user938363 2015-04-05 17:17:11

+0

如果沒有控制器的代碼(只是索引方法),很難回答 - 你可以在這裏發佈嗎? – Martin 2015-04-05 17:33:42

+0

只需發佈控制器和型號代碼。爲了方便起見,使用@query。謝謝。 – user938363 2015-04-05 18:22:49