【问题标题】:Rails CSV Download - Specify columns and get full URLRails CSV 下载 - 指定列并获取完整 URL
【发布时间】:2014-08-28 16:52:04
【问题描述】:

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

我有一个下载 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

【问题讨论】:

    标签: ruby-on-rails paperclip


    【解决方案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) 将图片的 URL 导出到 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
    

    【讨论】:

    • 这给了我名称、价格和图片作为空白列,第四列是图片网址。
    • 谢谢。很接近。现在我得到了所有列,但我得到了 4 列 - 名称、价格、图像和带有 url 的第四列。我不需要图像列,因为我在第 4 列中有 url。第四列没有列名,但我希望它与“图像”同名。
    • @Moosa 你确定wanted_columns 数组只包含:name:price
    • 知道了。您是否刚刚对其进行了编辑以使其成为+ [:image]。我认为做到了。谢谢你的时间。超级有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-17
    • 1970-01-01
    • 1970-01-01
    • 2021-06-02
    • 1970-01-01
    相关资源
    最近更新 更多