我有一个带有一些嵌套数据的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做的事吗?如果没有,我可以用什么方法来实现我的目标?
答案 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架构。