iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 22
0
Modern Web

Rails guide / Ruby API study系列 第 22

[ Rails guide study ]Day22 Active Storage 使用

  • 分享至 

  • xImage
  •  

首先,來聽首歌吧
Yes
來支持一下台灣的樂團吧!


Active Storage

這是一個 Rails 5.2 版本之後才推出的新功能,而且在製作專案的時候也會用到,因此這次才來看看這個功能如何使用
Rails Guide 的內容請看這邊

要使用這個功能,一開始就要先執行兩個指令

rails active_storage:install
rails db:migrate

這個動作會產生兩個 table : active_storage_blobsactive_storage_attachments,其中 active_storage_attachments 會儲存相對應 class name,所以如果有修改的話,也記得額外做一個 migration 檔改變這表格的相對應內容

# config/environments/development.rb
# config/environments/production.rb
config.active_storage.service = :local

# config/storage.yml

local:
  service: Disk
  root: <%= Rails.root.join("storage") %>

做完這些前置作業後差不多可以來動工了

附加檔案又分成一個 model 有多個檔案跟一個 model 有一個檔案,以下一一來介紹

一個 model 附加單一檔案

如果你想要在 User model 可以新增圖片的話,只需要加上這一行

has_one_attached :avatar

其中這個 avatar 可以把它想像成是 User 有個照片的虛擬欄位叫做 avatar

在表單需要上傳的時候這樣表示:

<%= form.file_field :avatar %>

然後 Strong parameter 的部分不要忘記修改,記得加上這個虛擬欄位

params.require(:user).permit(:email_address, :password, :avatar)

用 attach 這個方法把檔案或照片加到 User 身上

user.avatar.attach(params[:avatar])

另外還可以用 attached? 這個方法判斷是不是有附加檔案

一個 model 附加多檔案

如果是多個檔案或照片的話,用法大同小異,在 model 檔案加上這行:

has_many_attached :avatars

然後在 Strong parameter 的使用上改成陣列形式

params.require(:message).permit(:title, :content, avatars: [])

圖片顯示及變形

如果附加的是圖片,然後需要顯示出來
在目前的版本,需要搭配 MiniMagick 這套件來使用

#gemfile
gem 'mini_magick', '~> 4.5', '>= 4.5.1'

然後在顯示的頁面使用 variant 方法來改變尺寸

<%= image_tag user.avatar.variant(resize_to_limit: [100, 100]) %>

刪除 / 連結到上傳檔案

要刪除檔案的話,使用 purge 這個方法

user.avatar.purge

有幾個方式可以連結到這個檔案本身:

#直接把連結指向這檔案
url_for(user.avatar)
#下載檔案的連結
rails_blob_path(user.avatar, disposition: "attachment")
#如果要在 controller 跟 view 以外的部分連結,需使用絕對路徑
Rails.application.routes.url_helpers.rails_blob_path(user.avatar, only_path: true)

以上是 Active Storage 的介紹~ 今天的內容就先到這邊囉!

參考資料:

Rails Guide

Active Storage 開箱文

本文章同步分享於 http://anthonychao.site/


上一篇
[ Rails guide study ]Day21 migration 檔的執行 / rollback / 其他動作
下一篇
[ Rails guide study ]Day23 Active Record Validations part 1
系列文
Rails guide / Ruby API study30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言