Rails CSV Download - 指定列并获取完整的URL

时间:2014-08-28 16:52:05

标签: ruby-on-rails paperclip

我正在开发一个市场应用程序,卖家可以列出要销售的商品。

我有一个下载CSV方法,可以让卖家下载他们的商品。

我的方法下载所有列。我有两个问题:

1)如何指定列,让我们说我只想要名称,图片,价格。

2)在模型中,图像字段只存储图像名称,例如item.jpg。但我想导出存储图像的URL。我使用Paperclip加载图像和Dropbox来保存它们。所以每张图片都有一个dropbox url,我想导出它。

我在模型中的方法:

def self.to_csv(listings)
  CSV.generate do |csv|
    csv << column_names
    listings.each do |listing|
    csv << listing.attributes.values_at(*column_names)
   end
  end
end

1 个答案:

答案 0 :(得分:1)

  

1)如何指定列,让我们说我只想要名称,图片,价格。

您需要更改.values_at(*column_names)部分以仅选择所需的列:

def self.to_csv(listings)
  wanted_columns = [:name, :image, :price]
  CSV.generate do |csv|
    csv << wanted_columns
    listings.each do |listing|
      csv << listing.attributes.with_indifferent_access.values_at(*wanted_columns)
    end
  end
end
  

2)在CSV文件中导出图片的网址

你可能有像image.url这样的方法,它返回图像的URL:

def self.to_csv(listings)
  wanted_columns = [:name, :price]
  CSV.generate do |csv|
    csv << wanted_columns + [:image]
    listings.each do |listing|
      attrs = listing.attributes.with_indifferent_access.values_at(*wanted_columns)
      attrs.push(listing.image.url) # if image is not always present, use `listing.image.try(:url)`
      csv << attrs
    end
  end
end