Naomi's notebook

Naomi's notebook

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の方で指定してあるが、やり方が知りたい。

取り急ぎできた(とても雑だが)

f:id:Naomi_Lilienthal:20200812225032p:plain
結果