Ruby on Rails tutorial +alpha (1)ユーザー画像をGraphbizじゃなくてデータベースに保存できるようにする
第一回:ユーザー画像をGraphbizじゃなくてデータベースに保存できるようにする
チュートリアルをやったとはいえまだ全然わからんなので、とりあえず既存の知識の組み合わせですぐできそうなものを。 やっていきます。
git checkout -b user-image
userとactivestorageを結びつける (app/models/user.rb)
class User < ApplicationRecord has_one_attached :image
rails db:migrateする
viewにimageのアップロード場所を作る
<%= f.label :image, "User Picture" %> <span class="image"> <%= f.file_field :image %> </span>
そのほかuser_contoroller
def update @user = User.find(params[:id]) #画像の追加 @user.image.attach(params[:user][:image]) if @user.update(user_params) flash[:success] = "Profile updated" redirect_to @user else render 'edit' end end ... def user_params params.require(:user).permit(:name,:email,:password,:password_confirmation,;image) end
多分これで内部的には画像が保存できてるはず。 あとはgravater_forを変えて保存してある画像を表示するようにする。 gravater_forを全体的に
<%= image_tag current_user.image if current_user.image.attached? %>
などに変えればOK。 さらに、micropostでやったように5MB以下とかファイル形式の制限をつけるとよい。
ただしこのままだとサイズがそのまま表示されてしまう。 これもImageMagicを使ってやればいいだけ。
def icon_image(size:80) return image.variant(resize_to_limit: [size, size])if image.attached? return 'USAGINEKO.jpg'#,size:"#{size}x#{size}" end
デフォルト画像を用意したのだが、これのサイズも関数の中で指定する方法がわからなかった。しょうがないのでimage_tagの方で指定してあるが、やり方が知りたい。
取り急ぎできた(とても雑だが)