🐕

Rails 大量画像データ投入

2021/05/08に公開

画像を大量に投入したい

railsのコンソールで、画像データを一度に登録したい場合、画像の保管pathをどのように指定すればいいのか分からなかった。そこで自分で調べた結果をまとめる。

下準備

Rails version: 6.0.3.6
二つのファイルを準備する
1つ目はseedsファイルを準備する

seeds.rb
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.

https://api.rubyonrails.org/v6.1.3.1/classes/ActiveStorage/Blob.html

画像ファイルのpath内のRails.rootはRailsアプリケーションのディレクトリを指している。
2つ目はモデルファイルを準備する

models/tweet.rb
class Tweet < ApplicationRecord
  ##Validation
  validates :text, presence: true

  ## Association
  has_one_attached :image
end

データ投入

Railsアプリケーションのディレクトリ上で
rails db:seed を実行すると画像含めてデータを登録することができます。

これでデータを登録完了です。
各自で、データが登録されているか確認してください。

他に、簡単に画像を登録できる方法があると思います。
知っていましたら、是非教えてください。

Discussion