首页 > 解决方案 > 如何从 CSV 导入图像并使用 ActiveStorage 附加到模型?

问题描述

我正在尝试从 CSV 导入用户头像并使用 ActiveStorage 附加到用户。

我为此创建了一个 rake 任务,但它不起作用(并且不会引发任何错误)。在我的 CSV 中只有 2 个字段:电子邮件和头像(头像是文件的 url,位于另一台服务器上)。

这是任务:

require 'csv'
namespace :import do
  desc "Import avatars to users from CSV"
  task avatars: :environment do
    filename = File.join Rails.root, "avatars.csv"

    CSV.foreach(filename, headers: true, col_sep: ";", header_converters: :symbol) do |row|
      User.find_by(email: row[:email]) do |u|
        u.avatar.attach(URI.parse(row[:avatar]).open)
      end
    end
  end
end

有什么建议吗?谢谢你的帮助。

标签: ruby-on-railscsvrake-taskrails-activestorage

解决方案


您是否尝试过捕获任何异常并在控制台中打印问题?

像这样的东西:

require 'csv'
namespace :import do
  desc "Import avatars to users from CSV"
  task avatars: :environment do
    begin
      filename = File.join Rails.root, "avatars.csv"

      CSV.foreach(filename, headers: true, col_sep: ";", header_converters: :symbol) do |row|
        User.find_by(email: row[:email]) do |u|
          u.avatar.attach(URI.parse(row[:avatar]).open)
        end
      end
    rescue StandardError => e
      logger = Logger.new(STDOUT)
      logger.error e.message
      logger.error e.backtrace.join("\n")
    end
  end
end

另外,您确定您有使用该电子邮件的用户吗?


推荐阅读