LoginSignup
0
1

More than 3 years have passed since last update.

【rails】seedデータからファイルを読み込んで、ファイル内のimageを一括で保存する

Posted at

railsのseedデータからファイルにあるイメージを一括で保存する方法を、説明します。

準備)
①carrierwaveを使います。
②db/imagesを作成します。

以下のコードでイメージを保存できます。

seeds.rb
Image.create!([
  (1..20).map do |n|
    [ 
      id: n,
      image: open("#{Rails.root}/db/images/#{n}.jpg")
    ]
  end
])

しかし、この場合、イメージ名を1.jpgとかにしないといけないから、めんどくさい。。。

なので、このコードで楽にいけます!

seeds.rb
images = Dir.open("#{Rails.root}/db/images")
images.each.with_index(-1) do |image, i|
  next if image =~ /^\.+$/
  Image.create!(
    id: i,
    name: image,
    image: open("#{Rails.root}/db/images/#{image}")
  )
end

説明します。

images = Dir.open("#{Rails.root}/db/images")
ここで、ディレクトリー内の全ての画像を並べることができます。

もし、以下のコードで計算すると、、

images.each do |image|
  puts image
end

(結果)
.
..
XXX.jpg
XXX.png
XXX.jpg

こんな感じになり、「.」[..]が邪魔です。

なので、next if image =~ /^\.+$/を入れることで、「.」[..]がスキップされるようになります。

今回は、idも入れたかったので、each_with_indexメゾットを使いましたが、「0」から始まるし、「.」[..]をスキップするので、逆に2から始まってしまいます。

なので、「1」から始めるために、each.with_index(-1)を使っいました。

これで、簡単にseedで画像を保存できるようになりました。めでたし。

ご指摘の点があれば、ぜひツッコンでください!
よろしくお願いします!

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1