###railsのseedデータからファイルにあるイメージを一括で保存する方法を、説明します。
準備)
①carrierwaveを使います。
②db/imagesを作成します。
以下のコードでイメージを保存できます。
Image.create!([
(1..20).map do |n|
[
id: n,
image: open("#{Rails.root}/db/images/#{n}.jpg")
]
end
])
しかし、この場合、イメージ名を1.jpgとかにしないといけないから、めんどくさい。。。
なので、このコードで楽にいけます!
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で画像を保存できるようになりました。めでたし。
ご指摘の点があれば、ぜひツッコンでください!
よろしくお願いします!