IT技術にまつわる実験ノート

「長編を書くより、短編を数多く完成させてください。それが上達への近道です」 by 手塚治虫

自作Webアプリ「IT勉強会用 名刺ジェネレーター」を公開しました!ぜひご活用ください😀

https://it-benkyoukai-meishi.herokuapp.com/

ActiveStorage で外部の画像を保存してみる

はじめに

ここでは以下の記事を参考にして、ActiveStorage で外部の画像を保存してみることにする。

 

使ってみる

サンプル用のプロジェクトを作成する。

  • rails new active_storage_url
  • cd active_storage_url

 

サンプル用に User モデルを scaffold して作成する。

  • bin/rails g scaffold User name:string
  • bin/rails db:migrate

 

ActiveStorage の初期設定をする。

  • bin/rails active_storage:install
  • bin/rails db:migrate

 

app/models/user.rb を編集する。

open-uri を require して、外部の画像を open したものを、attach して保存する。attach メソッドは、filename オプションを渡さないとエラーになる。

f:id:matt-note:20190618150851p:plain

 

app/controllers/users_controller.rb で、Strong Parameters に :avatar を追加する。

f:id:matt-note:20190611151448p:plain

 

app/views/users/show.html.erb で保存した画像を表示してみる。

f:id:matt-note:20190611151601p:plain

 

サーバーを起動して、localhost:3000/users にアクセスする。

 

ユーザーを作成すると、画像を保存して、画像を表示できる。

f:id:matt-note:20190611151810p:plain

 

まとめ

SNSと連携したログイン機能を作成する際に、アバターのURLがわかるので、同じ要領でユーザーのデフォルトのアバター画像を設定できる。

 

補足

Active Storage でアバター画像の URL をビューで取得したい時は、以下のようにする。

 

url_for メソッドの引数にアバターを渡すと、画像のパスを取得することができる。

app/views/users/show.html.erb で使ってみる。

f:id:matt-note:20190629230751p:plain

 

サーバーを起動して、ユーザーの個別ページにアクセスする。

f:id:matt-note:20190629230827p:plain

-> 保存した画像のパスにアクセスすることができた。