アラフォーがお金持ちになるためエンジニアになったブログ

お金も根性も学歴もないアラフォーまきのがエンジニアになってお金持ち目指すよ!

侍エンジニア塾 16回目の授業

どうも、アラフォーまきのです。
今日は16回目の授業でした!
サクサク記録してサクサクやることやっちゃいましょう。

前回からの課題

とにかく卒業制作。変わり無し。
この間私がやっていたのは以下の作業。

  • deviseの導入 OK
  • 新規ユーザーを登録した時にコールバックを発動させる NG
  • 管理者の追加(Usersテーブルにadminカラムを追加してフラグで管理)と管理者用コントローラの追加 OK
  • FAQから戻るを押した時、ログイン中のユーザーなら自分のマイページへ、ログインしていないユーザーならトップページへ戻るよう振り分け OK
  • 一般ユーザーと管理者とでログイン後に違うページへ移動させる NG
  • ログインした時にURL上でユーザーIDが出るようにする OK...?
  • 新規登録時にユーザーネームを登録できるようにする OK
  • 仕様の再検討 OK
  • Gitでの巻き戻し OK


とりあえずdeviseは導入できたんですけど、もともとUserモデル作ってあったから、そこら辺でちょっとつまづいたんです。
だから途中でメンターさんにフォローしてもらって、とりあえずは導入成功しましたw

他、いくつかうまくいかないものは自分で調べてみて、なんとかなったものもあったのがうれしかった。

どうにもならないもので、slackのやり取りでは収拾つかなそうな案件は、今日の授業でメンターさんへ相談しました。

今日の授業

・うまく行かなかったものたちの相談
・ActiveStorageについて

この2つが大枠の授業内容です。
今日も2時間50分やったのでかなりのボリュームだったのだけど、うまく行かなかったもののうち、コールバックの部分についてとりあえず記録。


コールバックとcurrent_user
ユーザーが新規に登録されたと同時にやってほしい作業があったので、前回メンターさんと相談してコールバックを使うことにしていました。

で、コールバックはいわゆるbefore_actionのモデル版みたいなやつなんで、User.rbにプライベートメソッドを書いて、それをafter_createで発動させるようにしたんですけど、うまくいかず。

この原因がcurrent_userでした。
current_userは、deviseを導入することで使えるようになるメソッド。

今ログインしているユーザーの情報を、current_userで拾えるようになるわけです。

私がコールバックでRailsにやってもらいたかった作業では、値にユーザーIDを持たせてあげないといけなかったんで、ユーザーIDはcurrent_user.idだよって書いたんです。

でも、current_userっていうメソッドは、ビューかコントローラーで生きるメソッドだったんです。知らなんだ…。

そもそもUser.rbは何かっていうと、モデルなんであって、モデルはデーターベースを操るわけで。

DBってことは、別に誰がログインしているとかは関係ないわけなので、本当はcurrent_user.idではなくself.idでよかったと教わりました。

直したら無事成功!
current_userというメソッドは、ビューかコントローラで使うものだった!

そうか、current_userって書けばどこでも通用するんだろうと思い込んでたわ…。勉強不足。

ActiveStorage

ここは細かく書くとすっごい長くなるから箇条書きで簡単に。

  • アップロードする時、そのまま読み込めば色々問題がある場合がある。
  • 画像ではないものをあげようといている、馬鹿でかい画像をあげようとしている、など
  • そこで一旦画像の内容をテキストに置き換えて、一時的に退避させる。これがtemp file (temporary = 一時的な)
  • そもそもOSがtemp fileの指示を出してる。

そこのアプリAさんはこの場所でこういうファイル名で一時ファイル置いといてね。
アプリBさんはこの場所でこいうファイル名ね。

  • 好き勝手に各アプリケーションが勝手に一時ファイルを置きまくれば、当然容量がいっぱいになっちゃう。中には動かなくなるアプリも出てくる。
  • Railsでも同様にOSから指示をうけて、指定の場所に、指定のファイル名で一時ファイルを置いている。
  • アップロードする時は、その一時ファイルを読み込んでくることになる。
  • どこからそのファイルを読み込んでくるの?というpathを指定してあげることになる
  • RubyのFIle.openとか書いたりする。
  • ActiveStorageならそれをかなりお手軽に。コマンド4つと、モデルに一言程度で完了できちゃう。
  • ActiveStorageはRails5.2から導入されていて、Railsが最初から持っているから、Gemfileに書いたりbundle installしなくてOK。

次回までの課題

引き続き、作業を進めます。
・一般ユーザーと管理者とでログイン後に違うベージへ移動させる
→とりあえずは同じビュー(マイページ)を表示して、管理者だった場合のみ、マイページ内に色々作業できるようなリンクをくっつけてみることにしました。
うまくできるかな?

ActiveStorageを使って画像のアップロードができるようにする
→今日教わったので早速実装したい。

ActiveStorage自体は簡単。でも裏では色々やってるんだなーってのが面白かった。

他にもうまく実装できなかった部分とか、アドバイスもらったところとか頑張ってやっていきます。

余談

我がメンターさんは北の大地にお住まいで、今日は朝から雪かき祭りを開催していたそうです。

私、雪とかめっちゃテンション上がる人で、とにかく雪が降るとメンタルが幼稚園まで遡ってるんじゃないかってくらいになりますw

東京でも年に1〜2回くらいは5〜10cm積もりますが、その時はもう大喜びですね!

仕事なんてもろともしないです。長靴でザクザク歩きます。
ちょっと滑りそうで怖いところもあるけど、雨より全然雪がいいです。

そして、ちょっとでも積もると、ベランダの手すりに手のひらサイズのちっさい雪だるまが並びますw

そんな話をメンターさんにしていたので、授業の後、お外の様子をslackで送ってくれました。

そりゃもう真っ白!
みるだけでテンション上がりましたw
昨日の朝は特に冷え込んだそうで、霧氷の画像も見せてくれました。

すごいなー!感動した!

こういうやりとりができるのも、なんとなく楽しくて侍塾続いている気がします。

あとは外出しなくていいこと。
多分これが一番続いてる理由としてでかい。

メンターさんが素敵な人であることも重要だけれど、どんなに素晴らしい人でも私は多分出不精と面倒が先にきちゃうから、家にいながらレクチャーを受けられるってのは多分すっごいあってるんだと思う。

では、次回はまた来週金曜日8時から〜!