アラフォーがお金持ちになるためプログラマ目指すブログ

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

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

どうも、アラフォーまきのです。
今年最後の侍塾、終わりました。
8時から初めて、終わったのが11時50分ごろだったので4時間になるところでしたw

やることもやりたいこともいっぱいあるので、目一杯端折っていきますw

※2018/12/28 23:33追記
うっかりブロック引数のことを「ブロック変数」と堂々と書いておりました。大変失礼いたしました🙇‍♀️

今日の授業

私の質問とリファクタリングで終わっちゃったよ!

中でも、今頃になって判明した残念箇所のみに絞るとこんなかんじ

途中からbooleanを取り入れた事による問題

例えば公開・非公開みたいに、yesかnoの2択をDBへ保存しようとするとき。

DBのカラムの型はbooleanを使えばよかったんだけども、私はbooleanを知らなかった!

だから「数値の0・1を使って、0がtrueみたいに考えるんだな」と思ってた。

だもんで、初期に作ったテーブルでは0・1という数値で管理していたんだな。

けれど、そのあとbooleanに出会い、そこから作り始めたテーブルでは、公開・非公開をbooleanで管理し始めた。

で、この公開・非公開はいたるところで使うわけで、私は定数を使って管理をし始めたわけだ。
↓こんな感じで

PRIVATE = 0
PUBLIC =  1

これ、数値を当てはめているんだけども、ここに落とし穴。

私が使っているDB Browser for SQLiteでは、booleanが0か1という表示になる。

f:id:MmRevorution:20181228155305p:plain

だから、私は「boolean」なのに、いつしかbooleanを数値と勘違い。

これ↓をみても、「boolean型」と「数値型」ではなく「booleanという特別な数値の型」といつの間にか刷り込み状態に;

f:id:MmRevorution:20181228152637p:plain


こんな調子だから、定数がうまく機能しなかったという。

いろんなところで使うものは、型を統一すること!
知識不足且つ後先考えないまきのならではのミスではなかろうか…;

コントローラ名不揃い

これも同じような話。
コントローラ名は基本複数系に、とかってのありますよね。

ここでの私の誤解は「rails gしたら、なんでもRailsが複数形・単数形に調整してくれる」というもの。

だから…

あれ、コントローラーって複数形だっけ?単数形だっけ?

忘れたわ

でもまあRailsがよきに計らってくれるし適当でいいか

☠️

という;

scaffoldのときは…とか、テーブルは…とか、そういうRailsの仕様を覚えるより、モデルは?コントローラは?で覚えるべし。


partialの誤解

partialはただの部品化だから、例えばフォームの

<%= form_with (model: @user,…) do |f| %>
    <%= f.text_area :comment %>
    <%= f.submit "登録" %>
<% end %>

のうち、

<%= form_with (model: @user,…) do |f| %>
<% end %>

の2行だけを部品から除外して、それぞれのhtml.erbへ書いたって全然かまわない…!

いや、実はpartialにしたあと、editやnewへの遷移が、Railsの自動推測ではうまくいかなかったんですよ。

そのときは

<%= form_with (model: @user,…) do |f| %>
    <%= f.text_area :comment %>
    <%= f.submit "登録" %>
<% end %>

のように、form_withの中身まるまるpartialにしてたんだな。

このコードをみたメンターさんから、頭とオケツを切り離しておkときいたので

<%= form_with (model: @user,…) do |f| %>

<% end %>

の2行分だけpartialには入れず、edit.html.erbやnew.html.erbに残す、というやり方をしたよ。

でも、まさかそこから切り離しちゃっていいなんて、全く想像だにしなかった!

コードを途中でぶった切る感じだから、なんか「本当にいいのぉー?」って感じでした(笑)

全然OKとのこと。これは斬新だった。

ただ、その時にはpartialを呼ぶedit.html.erbやnew.html.erbの方で一言付け加えが必要。

余計な一言を書かなくていい、ベーシックなpartialの呼び出しは、partialを書いたファイル名を呼んであげるだけ。
partialをかいたのが_form.html.erb っていうファイル名なら

<%= render "form" %>

って感じで。

ただ、まきのみたいに頭とオケツを切り離している場合は

<%= render  "form", partial側のブロック引数:editやnewでのブロック引数名 %>

こんな感じで、partial側とedit/new.html.rb側のブロック変数引数を紐付けしてあげればOKだった。

ほとんどの人が、form_withを書くとき

<%= form_with (model: @user,…) do |f| %>

と書いてると思うけれど、たとえばpartial側で

<%= form_with (model: @user,…) do |form| %>

という感じでブロック変数引数を f じゃなくて form にしていて、edit.html.erbやnew.html.erbでは

    <%= f.text_area :comment %>
    <%= f.submit "登録" %>

のように form.text_area ではなくf.text_areaみたいに書いていたんなら、editやnewでのpartialとの紐付けは

<%= render  "form", form:f %>

となる。

こんな書き方するのはまきのみたいに統一感ないコード書く人だけだと思いますが;

おわりに

とにかく、型やコントローラー名、コードの統一がないことで今日はいろんなところに影響が出ていることがわかりました;

ブログもそうね、数字と漢数字が混ざったり、「コントローラ」と「コントローラー」が混ざったり;

ズボラ。気をつけよう。

他にもいろんなことを教わったんだけども、ちょっと文章化すんの大変で;

今日から冬休みで4日まで仕事がないので、とにかく頑張ってやります。

せっかく仕事がなくて自由な時間が増えたので、ここでガンガンやらないと勿体無い!

頑張ります。
そして一刻も早く貧乏から抜けなくては…。

貧乏はもういやだー!うおおん!
頑張ります!この冬休みどれだけ頑張れるかだ!