先安裝今天會用到的兩個gem。
gem "rmagick", :require => 'RMagick'
gem "carrierwave"
(不加require會有bug)
上傳圖片
rails g uploader image
rails g migration add_image_to_posts image:string
在post.rb裡面加入:
mount_uploader :image, ImageUploader
再來就是在post controller的strong parameter加入image。
如此就完成上傳圖片功能了。
要把圖片拿出來的話只要對著圖片呼叫"post.image_url",
就可以了(這裡圖片命名為image,如果是photo的話可以用photo_url來拿到)
<%= image_tag @post.image_url %>
而用直接丟網址來抓圖片也可以,carrierwave已經內建了helper來做這件事情,
只要名字的格式對了,我們就能輕鬆的貼上網址上傳圖片,
不需要再做其他額外的設定。
<%= f.input :remote_image_url, label: "或是圖片網址" %>
(這裡記得也要加入strong parameter)
但是問題就來了,現在上傳圖片的大小都是圖片原始的大小,
有沒有辦法能管理圖片的size呢?
(這裡可以直接從image_tag裡面去改,不過下面要介紹更好的方法)
#管理上傳的圖片 - rmagic
現在只要設定大小,不需要動到其他東西,
先到剛剛generate的ImageUploader裡面解開rmagic的comment,
再加上新的version設定
include CarrierWave::RMagick
version :display do
process :resize_to_limit => [400, 400]
end
接著只要在剛剛的image_url加入對應的version就可以了。
image_tag @post.image_url(:display)
參考資料:
http://rubydoc.info/gems/carrierwave/frames