Rails 用 CarrierWave 大量產生假圖片 ( Remote image )

我們常需要一些假資料來撐開版型、驗證,但一筆一筆新增很麻煩,所以會用到rake自訂任務請Rails一次幫忙產生500筆資料,但上傳圖片的image欄位是藉由Gem CarrierWave產生,所以需要用它提供的helper: remote-image_url

Strong Parameter 新增 CarrierWave 原生的help: remote_image_url

1
2
3
4
#restaurant_controller
def restaurant_params
params.require(:restaurant).permit(:name, :tel, :opening_hours, :address, :description, :image, :remote_image_url)
end

自動建立 500 筆資料

新增 Rake 任務 dev.rake,自動建立 500 筆餐廳資料
在Restaurant下使用remote_image_url,在後面加上遠端網址即可。

1
2
Restaurant.destroy_all
Restaurant.create!(name: 'Andromeda', remote_photo_url: 'https://visualhunt.com/photos/l/7/architecture-store-building.jpg')

整體檔案會像是這樣,另外用FFaker Gem來產生像電話地址的假資料

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
namespace :dev do
task fake: :environment do
Restaurant.destroy_all

500.times do |i|
Restaurant.create!(name: FFaker::Name.first_name,
opening_hours: FFaker::Time.datetime,
tel: FFaker::PhoneNumber.short_phone_number,
address: FFaker::Address.street_address,
description: FFaker::Lorem.paragraph,
category: Category.all.sample,
remote_image_url: 'https://visualhunt.com/photos/l/7/architecture-store-building.jpg'
)
end
puts "餐廳資料成功建立"
puts "You have #{Restaurant.count} restaurants data"
end
end

用亂數隨機讀取圖片

但是只有一張照片好像很單調,那就改成本端檔案吧
將圖片放到public底下的目錄,檔案命名為0.jpg~20.jpg
以亂數來隨機存取圖片

1
2
# dev.rake
image: File.open(Rails.root.join("public/seed-img/0#{rand(1..9)}.jpg"))

Reference