将数据导出到rails中的csv(railscasts#362)

时间:2013-03-08 14:11:13

标签: ruby-on-rails csv railscasts

关于csv导出中有很多关于rails的问题,但我找不到解决我问题的问题。我正在尝试在我的rails应用中导出模型的所有实例,我正在关注Ryan Bates' RailsCast #362,但现在我遇到了生成的CSV问题。

这是我在模型控制器中的索引操作(@bookstore是在另一个操作中设置的,在before_filter中使用):

def index
  @books = @bookstore.books
  respond_to do |format|
    format.html
    format.csv { render text: @books.to_csv }
  end
end

我在Book Class(book.rb)中有这个方法:

def self.to_csv
  CSV.generate do |csv|
    csv << column_names
    all.each do |book|
      csv << book.attributes.values_at(*column_names)
    end
  end
end

问题在于,当我尝试打开/bookstores/1/books.csv时,我得到了这个:

#<Book:0x007f7f755252a0>,#<Book:0x007f7f75524c38>,#<Book:0x007f7f755245f8>,#<Book:0x007f7f75523fe0>,#<Book:0x007f7f75523978>,#<Book:0x007f7f75523130>,#<Book:0x007f7f755227d0>,#<Book:0x007f7f75522190>,#<Book:0x007f7f75521b78>,#<Book:0x007f7f7552c2f8>

我不知道出了什么问题,并且对Ruby On Rails没什么经验。谢谢!

3 个答案:

答案 0 :(得分:2)

我遇到了同样的问题。我发现我的类方法to_csv甚至没有被调用。我可以删除它并获得相同的输出。

我通过重新启动服务器“解决”了这个问题。在那之后,to_csv开始被正确调用,事情就像他们应该的那样。

railscast第362集确实提到了重新启动服务器,但没有说明代码在你执行之前不会工作。

  

一旦我们重新启动服务器,它就会选择我们的csv库   应该能够查看我们的CSV数据。

[railcast第362集] http://railscasts.com/episodes/362-exporting-csv-and-excel

答案 1 :(得分:0)

在railscast中,它说:

format.csv { send_data @products.to_csv }

你为什么不这样做?

如果这不起作用,您可以尝试使用以下代码收集@books对象吗?我很感兴趣它是否会有所作为:

Book.where(:bookstore_id => @bookstore.id)

它不应该,但你似乎以某种方式获得了@books.each {|b| array << b.to_s}的数组,我很好奇为什么。

答案 2 :(得分:0)