使用关联模型值在Rails中导出为CSV

时间:2015-04-03 15:37:39

标签: ruby-on-rails ruby csv

在我的项目中,其中一项功能是将数据导出为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?

1 个答案:

答案 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