hibiki  2021/03/11更新

ActiveStorageを使用した画像保存


ActiveStorageを使用して画像を保存、表示させる

ActiveStorageを導入する

$ rails active_storage:install

このコマンドを使用するとactive_storage_blobs とactive_storage_attachments
といった二つのテーブルが作成されたマイグレーションファイルができある
出来上がったマイグレーションファイルを確認できたら


rails db:migrate

を実行する。

modelに対してActiveStorageの設定をする

user.rbにActive Storageを設定する例でやっていきます。カラムの名前はavatarでいきます。

まず一つの画像ファイルを保存したい場合の記述は

has_one_attached :avatar

と書きます。次に複数の画像ファイルを保存したい場合の記述は

has_many_attached :avatar

と記述します。

### 画像を保存できるようにする
ここではdeviseを使用する例でいきます。


<%= form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put }) do |f| %>
<%= render "devise/shared/error_messages", resource: resource %>

この中に下記を追加します。

<div class="field">
<%= f.label :avatar, "プロフィール画像" %><br/>
<%= f.file_field :avatar %>
</div>

上記のコードを書くことで簡単に保存フィールドが出来上がリマス。
### 保存した画像をviewで表示させる
表示させたいviewファイルに画像を表示させるコードを書いていきます。

<%= image_tag user.avatar %>

僕はこのコードで表示できずエラーなりました。
なので書き方を変えてこのコードで表示に成功することができました。

<%= image_tag(url_for(@user.avatar)) %>

今気づいたのですがもしかしたら一行目のコードはインスタンス変数を使用していないから表示されてないのでは?と気づきましたがまた後日確認してみます(笑)
もしかしたら一行目も@user.avatarとすれば表示できるかもしれませんね!
さすが初心者の僕ですね!!

おしまい。

タイトルとURLをコピーしました