0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

パーフェクトRubyonRails備忘録6

Posted at

ActiveStorageによるファイルアップロード

  • 実装

    • ActiveStorageの有効化

      • 以下を実行
      • rails active_storage:install
    • ActiveStorage用属性をモデル作成時に宣言する

      • rails g scaffold user name portrait:attachment
      • portrait:attachment部分がActiveStorage用属性の宣言
      • 生成されたモデルには以下の記述が追加されている
      class User < ApplicationRecord
        has_one_attached :portrait # 追加部分
      end
      
    • 注意として、Usersテーブルにportraitはカラムとしては無く、他のテーブルとして管理されている。

    • これでファイルアップロード機能は実現している

  • サムネイルの表示

    • 事前準備
      • gem 'image_processing' をアンコメントし、 bundle install
      • brew install imagemagickを実行
    • ActiveStorageのサムネイル生成は、画像用URLにアクセスしたタイミングで画像を生成する。他にもアップロード時、アップロード後に非同期、などのタイミングで生成するサービスもある。
    • 先ほど実装したファイル(app/views/users/show.html.erb)を編集する
    <%= image_tag @user.portrait.variant(resize_to_limit: [100, 100]) %>
    
  • ダイレクトアップロード機能

    • ダイレクトアップロードにより、アプリケーションサーバを経由せずにファイルを直接アップロードできるので、アップロード時間の短縮や、アプリケーションサーバへの負荷を軽減することが可能になる。

    • 実装

      <%= form.file_field :portrait, direct_upload: true %>
      
  • ActiveStorageのデメリット

    • バリデーションヘルパーが無い
    • フォーム送信時、他の項目がバリデーションエラーになった時、再度ファイルを選択しなければならない
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?