Alex Liang

[Rails] 使用carrierwave實作圖片上傳

上一篇說明如何設定AWS S3。這一篇則是記錄使用carrierwave實作圖片上傳。

本例我們將建立一個model:Photo 配合carrierwave實現圖片上傳

安裝gem carrierwave

Gemfile
1
2
gem "carrierwave"
gem "mini_megick"
1
2
>>bundle install
>>rails g uploader image

會產生uploaders/image_uploader.rb

設定autoload_paths

config/application.rb
1
2
3
4
5
6
module Artstore
class Application < Rails::Application
...(略)
config.autoload_paths += %W(#{config.root}/app/uploaders)
end
end

建立model:Photo

1
2
>>rails g model photo product_id:integer image:string
>>rake db:migrate

假如己有一個product model,設定product和photo的關聯

models/photo.rb
1
2
3
4
5
class Photo < ActiveRecord::Base
belongs_to :product

mount_uploader :image, ImageUplader
end
models/product.rb
1
2
3
4
5
class Product < ActiveRecord::Base
has_one :photo

accepts_nested_attributes_for :photo
end

新增product時能新增圖片

app/controllers/admin/products_controller.rb
1
2
3
4
def new
@product = Prodcut.new
@photo = @product.build_photo
end

將upload資料夾加入gitignore

.gitignore
1
public/uploads

以上是使用carrierwave上傳圖片的流程,下一篇說明使用figaro管理s3密鑰。