Rails 4 - 将路由导出为CSV

时间:2014-10-27 15:15:58

标签: ruby-on-rails

我正在开发一个电子商务应用程序,我有一个csv导出功能,可以导出所有产品详细信息,如名称,价格等。每个产品都在一行中,每个产品属性都有一列。我想在文件中添加一列,其中包含每个产品的网址。我之所以这样,是因为我可以将其用作可以提交到各个购物网站的产品Feed。

这是控制器中的导出代码。如何添加一个名为route的列?我在模型中没有路线列。

 #controller
 def productlist
  @listings = Listing.all

   respond_to do |format|
     format.html
     format.csv { send_data @listings.to_csv(@listings) }  
   end
 end

 #model
    def self.to_csv(listings)
  wanted_columns = [:sku, :name, :designer_or_brand, :description, :price, :saleprice, :inventory, :category]

  CSV.generate do |csv|
    csv << ['Product_ID', 'Product_title', 'Designer_or_Brand', 'Description', 'Price', 'SalePrice', 'Quantity_in_stock', 'Category'] + [:Image, :Image2, :Image3, :Image4]

    listings.each do |listing|
      attrs = listing.attributes.with_indifferent_access.values_at(*wanted_columns)
      attrs.push(listing.image.url, listing.image2.try(:url), listing.image3.try(:url), listing.image4.try(:url)) 

      csv << attrs

    end

  end
end

1 个答案:

答案 0 :(得分:0)

def self.to_csv(listings)

  wanted_columns = [:sku, :name, :designer_or_brand, :description, :price, 
    :saleprice, :inventory, :category]
  header = %w(Product_ID Product_title Designer_or_Brand Description Price 
      SalePrice Quantity_in_stock Category Image Image2 Image3 Image4 ProductUrl)

  CSV.generate do |csv|
    csv << header

    listings.each do |listing|
      attrs = listing.attributes.with_indifferent_access.values_at(*wanted_columns)
        << listing.image.url << listing.image2.try(:url) 
        << listing.image3.try(:url) << listing.image4.try(:url)
        << Rails.application.routes.url_helpers.product_url(listing.Product_ID)
      csv << attrs
    end
  end
end

实际上唯一的区别是数组的最后一项:Rails.application.routes.url_helpers.product_url(listing.Product_ID),其中product_url是您前往product#show

的路线