目的
一個網站在許多地方都需要上傳圖片或照片的功能,例如大頭貼(Avatar)或是商品照片等,而在 rails 中我們有現成的 gem可以使用,你可以使用 paperclip 或 CarrierWave 來實作這個功能,這邊就筆記一下怎麼使用 CarrierWave。
前言
從完全沒寫過 web app 直接學習 Ruby on Rails,說實在真有點勉強…但接觸 RoR 後我發現這真的是我喜歡的東西,希望能保持這個初衷和熱情!也期待自己能有更多的作品 ccc
筆記
1. Gem
先添加 gem 到 Gemfile 中
then,
【提醒】安裝 rmagick 前得先安裝 libmagickwand-dev。
由於我的環境是 Ubuntu 15.04,所以透過sudo apt-get install libmagickwand-dev
安裝
2. 生成 Uploader
bundle install 後,可以在 rails g -h
看到新增了 uploader,接著
3. 添加欄位
在想要上傳圖片的資料表中添加對應的欄位
then, 記得 migrate
4. 實作上傳及顯示功能
首先在 model 中掛載 uploader
接著 view 即可作上傳跟顯示,以下為上傳、快取、刪除跟顯示的作法
最後,controller 中記得加入 strong params
以上,就完成用 CarrierWave 上傳圖片及顯示的功能囉!但,上傳後圖片大小為原始大小,所以我們可以透過 rmagick 來作 resize。
5. 使用 rmagick
首先在 image_uploader.rb
中取消註解:
上面透過 thumb
,讓上傳時保存原圖,並且產生一個 resize version,這樣想用原圖或縮放後的版本都很方便!
從上面可看到,從 _url(:thumb)
即可取得縮放後的圖片了!
That’s it, DONE!
【參考資料】
- CarrierWave: https://github.com/carrierwaveuploader/carrierwave
- RMagick: https://github.com/rmagick/rmagick