2014-10-27 70 views
0

我正在開發電子商務應用程序,並且我有一個csv導出功能,可以導出所有產品詳細信息,如名稱,價格等。每個產品都在一行中,並且每個產品屬性都有一列。我想添加一個列到文件中,其中將包含每個產品的網址。我想這樣做的原因是,我可以將其用作可以提交給各個購物網站的產品Feed。Rails 4 - 將路由導出到CSV

這是我在控制器中的導出代碼。我如何添加一個名爲路由到這個列?模型中沒有路線列。

#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
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_urlproduct#show

+0

在URL行路線,我得到一個錯誤說'缺少主機鏈接!請提供:host參數,設置default_url_options [:host],或將only_path設置爲true。 – Moosa 2014-10-27 19:42:22

+0

你如何從控制檯執行它? – blelump 2014-10-27 19:53:42

+0

不,我點擊本地主機上的導出按鈕。我試着設置':only_path => true'選項。當我這樣做時,導出運行時沒有錯誤,但csv中的url列爲空白。 – Moosa 2014-10-27 19:59:24