Rails导出CSV忽略空白

时间:2016-03-09 23:39:50

标签: ruby-on-rails ruby csv

我试图在Rails中创建一个简单的CSV导出。除了删除/存档表项目外,导出工作正常。我猜这是因为出口遇到了空白。

这是有效的:

= link_to transactions_path(format: :csv) do

除非交易中缺少某个项目。

试过这个

= link_to transactions_path(format: :csv,skip_blanks: true) do

但是在调用导出

时我仍然得到一个ERR_INVALID_RESPONSE

TransactionController:

respond_to :html, :json, :csv

def index
   @shops = current_user.shops

   respond_with(@shops) do |format|
     format.csv do
       response.headers['Content-Type']              = 'text/csv'
       response.headers['Content-Disposition']       = "attachment; filename=transactions-#{Time.now.strftime('%Y%m%d%H%M')}.csv"

       render inline: @shops.to_csv
    end
  end
end

有什么建议吗?

3 个答案:

答案 0 :(得分:6)

更改to_csv以传递skip_blanks。

 @shops.to_csv(skip_blanks: true)

答案 1 :(得分:3)

如果您想要下载CSV文件的链接,请改用send_data。如果要在浏览器中显示文件,请使用render text: @shops.to_csv

http://railscasts.com/episodes/362-exporting-csv-and-excel

respond_to :html, :json, :csv

def index
  @shops = current_user.shops

  respond_with(@shops) do |format|
    format.csv do
      send_data @shops.to_csv, type:'text/csv', filename: "transactions-#{Time.now.strftime('%Y%m%d%H%M')}.csv"
    end
  end
end

将您的link_to更改回之前的版本。

= link_to transactions_path(format: :csv)

答案 2 :(得分:1)

也许使用var COL = $(elem_title).text();

send_data

另外, def index respond_to do |format| format.csv { send_data @current_user.shops.to_csv, filename: "transactions-#{Time.now.strftime('%Y%m%d%H%M')}.csv" } end end 是一个实例方法吗?