将嵌套实体导出到CSV文件

时间:2010-03-05 22:15:46

标签: ruby-on-rails csv fastercsv

我有一个带有一些嵌套数据的rails应用程序,我想将其导出为CSV文件

模型看起来像:

class ContainerRecord < ActiveRecord::Base
  has_many      :child_records 

class ChildRecord < ActiveRecord::Base
  belongs_to :container_record

我希望能够在一行中导出包含每个ContainerRecord的CSV文件,其中包含前几列中的信息,以及其余列中每个ChildRecord的值。

我不能保证与每个ContainerRecord关联的ChildRecords的数量,我不在乎每行是否有不同数量的非空列。

我尝试过使用FasterCSV,但是我将子记录的所有数据都推到了一列而不是每列的列中。

这是我可以用FasterCSV做的事吗?如果没有,我可以用什么方法来实现我的目标?

2 个答案:

答案 0 :(得分:2)

不确定FasterCSV但是快速&amp;肮脏的解决方案可能是:

class ParentClass < AR::Base
  has_many :children

  def self.csv
    all.map do |object|
      ( object.attributes.values + object.children.map(&:child_field) ).flatten.join(',')
    end.join("\n")
  end
end

当然,将“child_field”替换为您想要从您的子模型中获取的字段。

答案 1 :(得分:2)

我最终找到了一个很好的tutorial on csv_builder,让我能够以最小的努力完成我想做的事情,并让我更加贴近MVC架构。