在我的项目中,其中一项功能是将数据导出为CSV。
我已经在模型中编写了一个函数来执行此操作,但该工作正常,但如果我想在相同的CSV文件中导出关联的模型值,该怎么办?
我尝试了多种方法,但没有成功。
Product.rb:
has_many :product_other_informations
def self.to_csv
CSV.generate do |csv|
csv << ["Name", "Description", "Tags", "Meta_keywords", "Page_title", "Meta_description", "Slug", "Published_status", "Other_information", "Other_information_value"]
all.each do |product|
csv << [product.name, product.description, product.tags, product.meta_keywords, product.page_title, product.meta_description, product.slug, product.is_published]
end
end
end
这用于仅导出产品值。如果我想导出&#34;产生其他信息&#34;我该怎么办?模型值在同一个CSV?
答案 0 :(得分:3)
您需要首先确定是否有其他信息要显示,如果有,您需要如何在一个CSV&#34; cell&#34;中显示可能的多行。也许你只包含name
属性(假设有一个product_other_information.name
属性)和逗号分隔多个。
在这种情况下,你的循环看起来像:
def self.to_csv
CSV.generate do |csv|
csv << ["Name", "Description", "Tags", "Meta_keywords", "Page_title", "Meta_description", "Slug", "Published_status", "Other_information", "Other_information_value"]
all.each do |product|
if product.product_other_informations.any?
row = [product.name, product.description, product.tags, product.meta_keywords, product.page_title, product.meta_description, product.slug, product.is_published]
other = product.product_other_informations.collect { |o| o.name }.join(", ")
row << other
csv << row
else
csv << [product.name, product.description, product.tags, product.meta_keywords, product.page_title, product.meta_description, product.slug, product.is_published, nil]
end
end
end