关于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没什么经验。谢谢!
答案 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)