如何将当前搜索页面导出到rails 3/4中的csv?

问题描述 投票:0回答:1

在轨道3/4中,可以通过在模型中定义方法self.to_csv并将format.csv添加到控制器中的respond_to来完成对csv的导出。点击link_to "CSV", index_path(format: "csv")开始导出。导出再次调用相同的操作并在csv中呈现。

我们的问题是用户如何将当前页面导出到csv。用户可以开始搜索,然后决定将当前页面导出到csv(不重做搜索csv导出)。有没有办法让用户这样做?

更新:csv导出的控制器代码示例:

  #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
ruby-on-rails ruby csv
1个回答
4
投票

如果您的页面考虑了控制器中的搜索参数(比如说@query变量),您可以简单地回调完全相同的控制器,但要求使用CSV格式而不是HTML格式。

假设您在/ users路由中列出用户,并且具有搜索参数,例如:

/users?query=smith

您可以创建一个链接来生成:

/users.csv?query=smith

这将回调相同的控制器,只需更改格式。这可以使用以下代码完成:

link_to "CSV", index_path(format: "csv", :query => @query)
© www.soinside.com 2019 - 2024. All rights reserved.