在SO中有很多关于rails中csv导出的问题,但我没有找到一个解决我的问题。我试图导出一个模型的所有实例在我的rails应用程序,我是按照瑞安贝茨的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类(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
问题是,当我试图打开/书店/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也没什么经验。谢谢!
我也有同样的问题。我发现我的类方法to_csv甚至没有被调用。我可以删除它并得到相同的输出。
我通过重新启动服务器"解决"了这个问题。在此之后,to_csv开始被正确调用,一切正常工作。
railscast第362集确实提到了重新启动服务器,但没有明确说明代码将无法工作,直到您这样做。
一旦我们重新启动了服务器,它就会获取csv库应该能够查看我们的CSV数据。
[railscast第362集]http://railscasts.com/episodes/362-exporting-csv-and-excel
在railcast中,它说:
format.csv { send_data @products.to_csv }
你为什么不那么做呢?
如果这不起作用,请尝试用以下代码收集您的@books
对象?我想知道这是否会有影响。
Book.where(:bookstore_id => @bookstore.id)
它不应该,但你似乎以某种方式得到一个@books.each {|b| array << b.to_s}
数组,我很好奇为什么。
有同样的问题,遵循这个注释,现在可以工作了
http://railscasts.com/episodes/362-exporting-csv-and-excel?view=comments comment_162272