我正在开发一个电子商务应用程序,我有一个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
答案 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