Active Storage
這是一個 Rails 5.2 版本之後才推出的新功能,而且在製作專案的時候也會用到,因此這次才來看看這個功能如何使用
Rails Guide 的內容請看這邊
要使用這個功能,一開始就要先執行兩個指令
1 | rails active_storage:install |
這個動作會產生兩個 table : active_storage_blobs
跟 active_storage_attachments
,其中 active_storage_attachments
會儲存相對應 class name,所以如果有修改的話,也記得額外做一個 migration 檔改變這表格的相對應內容
1 | # config/environments/development.rb |
做完這些前置作業後差不多可以來動工了
附加檔案又分成一個 model 有多個檔案跟一個 model 有一個檔案,以下一一來介紹
一個 model 附加單一檔案
如果你想要在 User model 可以新增圖片的話,只需要加上這一行
1 | has_one_attached :avatar |
其中這個 avatar 可以把它想像成是 User 有個照片的虛擬欄位叫做 avatar
在表單需要上傳的時候這樣表示:
1 | <%= form.file_field :avatar %> |
然後 Strong parameter 的部分不要忘記修改,記得加上這個虛擬欄位
1 | params.require(:user).permit(:email_address, :password, :avatar) |
用 attach 這個方法把檔案或照片加到 User 身上
1 | user.avatar.attach(params[:avatar]) |
另外還可以用 attached?
這個方法判斷是不是有附加檔案
一個 model 附加多檔案
如果是多個檔案或照片的話,用法大同小異,在 model 檔案加上這行:
1 | has_many_attached :avatars |
然後在 Strong parameter 的使用上改成陣列形式
1 | params.require(:message).permit(:title, :content, avatars: []) |
圖片顯示及變形
如果附加的是圖片,然後需要顯示出來
在目前的版本,需要搭配 MiniMagick 這套件來使用
1 | #gemfile |
然後在顯示的頁面使用 variant
方法來改變尺寸
1 | <%= image_tag user.avatar.variant(resize_to_limit: [100, 100]) %> |
刪除 / 連結到上傳檔案
要刪除檔案的話,使用 purge
這個方法
1 | user.avatar.purge |
有幾個方式可以連結到這個檔案本身:
1 | #直接把連結指向這檔案 |
以上是 Active Storage 的介紹~ 今天的內容就先到這邊囉!
參考資料: