【发布时间】:2019-03-09 15:01:56
【问题描述】:
我正在尝试为我的开发数据库播种。其中一个模型Project 有与之关联的图像。
我在./db/seed_files/ 中放置了一个占位符图像。我的种子文件如下所示:
# Add projects
1000.times do
project = Project.new(
name: Faker::Marketing.buzzwords.capitalize,
description: Faker::Lorem.sentence(rand(1..30))
)
image_file = File.open("./db/seed_files/placeholder_image.png")
project.images.attach(io: image_file, filename: "placeholder_image.png", content_type: "image/png")
project.save
end
这运行良好。它为每个项目附加一张图片。
但是,我想为每个项目添加多个图像。我想我可以多次附加同一张图片。
我试过了:
# Add projects
1000.times do
project = Project.new(
name: Faker::Marketing.buzzwords.capitalize,
description: Faker::Lorem.sentence(rand(1..30))
)
image_file = File.open("./db/seed_files/placeholder_image.png")
rand(1..3).times do
project.images.attach(io: image_file, filename: "placeholder_image.png", content_type: "image/png")
end
project.save
end
但这会导致错误:ActiveStorage::FileNotFoundError。
/Users/greidods/.rvm/gems/ruby-2.6.1/bundler/gems/rails-b366be3b5b28/activestorage/lib/active_storage/service/disk_service.rb:136:in `rescue in stream'
/Users/greidods/.rvm/gems/ruby-2.6.1/bundler/gems/rails-b366be3b5b28/activestorage/lib/active_storage/service/disk_service.rb:129:in `stream'
/Users/greidods/.rvm/gems/ruby-2.6.1/bundler/gems/rails-b366be3b5b28/activestorage/lib/active_storage/service/disk_service.rb:28:in `block in download'
/Users/greidods/.rvm/gems/ruby-2.6.1/bundler/gems/rails-b366be3b5b28/activesupport/lib/active_support/notifications.rb:180:in `block in instrument'
/Users/greidods/.rvm/gems/ruby-2.6.1/bundler/gems/rails-b366be3b5b28/activesupport/lib/active_support/notifications/instrumenter.rb:23:in `instrument'
...
我觉得有一种方法可以用多个附件播种一行。
是什么导致了这个错误?为什么我只能附上一张图片,但不能附上多次?
【问题讨论】:
-
你不需要多次打开文件
-
我已经更新了代码以确保我只打开文件一次。但是,多次尝试附加文件时仍然会出现错误。
标签: ruby-on-rails rails-activestorage