Rails 大量画像データ投入
画像を大量に投入したい
railsのコンソールで、画像データを一度に登録したい場合、画像の保管pathをどのように指定すればいいのか分からなかった。そこで自分で調べた結果をまとめる。
下準備
Rails version: 6.0.3.6
二つのファイルを準備する
1つ目はseedsファイルを準備する
100.times do |n|
Tweet.create!(
text: "説明文#{n}",
image: ActiveStorage::Blob.create_and_upload!(io: File.open("#{Rails.root}画像のpath"), filename:"画像の名前"),
user_id: 1
)
end
ActiveStorage::Blob.create_and_uploadについては、Railsのドキュメントによるとこんな感じに書いてある。
A blob is a record that contains the metadata about a file and a key for where that file resides on the service. Blobs can be created in two ways:
Ahead of the file being uploaded server-side to the service, via create_and_upload!. A rewindable io with the file contents must be available at the server for this operation.
Ahead of the file being directly uploaded client-side to the service, via create_before_direct_upload!.
The first option doesn't require any client-side JavaScript integration, and can be used by any other back-end service that deals with files. The second option is faster, since you're not using your own server as a staging point for uploads, and can work with deployments like Heroku that do not provide large amounts of disk space.
Blobs are intended to be immutable in as-so-far as their reference to a specific file goes. You're allowed to update a blob's metadata on a subsequent pass, but you should not update the key or change the uploaded file. If you need to create a derivative or otherwise change the blob, simply create a new blob and purge the old one.
画像ファイルのpath内のRails.rootはRailsアプリケーションのディレクトリを指している。
2つ目はモデルファイルを準備する
class Tweet < ApplicationRecord
##Validation
validates :text, presence: true
## Association
has_one_attached :image
end
データ投入
Railsアプリケーションのディレクトリ上で
rails db:seed を実行すると画像含めてデータを登録することができます。
これでデータを登録完了です。
各自で、データが登録されているか確認してください。
他に、簡単に画像を登録できる方法があると思います。
知っていましたら、是非教えてください。
Discussion