自己紹介
初めまして。DMMWEBCAMP2024年1月生(2024年2月時点で在学中)23歳女です。
もともと医療関係のお仕事をしていましたが、現在は退職し未経験でのエンジニア転職に向けて日々勉強中です!
プログラミング完全未経験の超初心者ですが、学ぶにつれて自分の学んだことをアウトプットする場が欲しいと思い、Qiitaで成長ブログのようなものをこれから書いていこうと思います。
ちなみに言語のアウトプットの練習にもなるため、面接にも役立ちそうというのも狙いです。
初回記事の内容は、超初心者が何でこのコードを書いているか忘れがちなポイント第一弾です!
(第何弾やれば終わるか分からない笑)
ではさっそく書いていきます。
before_action :authenticate_user!, except: [:アクション名]
authenticate_user!
が初心者には見慣れないですね。
これはコントローラの記述を書く際に、2行目以降必要となってくる記述です。
意味としては、『アクションを始める前にログインしていないユーザーは、ログインページにリダイレクト!アクション名で指定されたページ以外は行けない』といった感じです。この記述がないとログインしていないユーザーでもいろんなページにアクセスしたり、投稿、編集、削除などができてしまいます。逆にexceptで指定していたアクション(indexやshowなど)は閲覧することができます。
参考にさせていただいた記事はこちら。
こちらのサイトにはexcept以外にも、onlyやif、unlessなどの説明も載っています!
私自身とても勉強になりました。
if user_signed_in?(deviseのメソッド)
使いどころとしては、サインインしている人にはこれを見せたい、サインインしていない人にはこれを見せたいと思ったときに、表示などを使い分けるため使用するものです。
実際の使用例
<% if user_signed_in? %>
<%= link_to "新規投稿", new_xxxx_path %>
<%= link_to "ログアウト", destroy_user_session_path, method: :delete %>
<%= link_to "マイページ", user_path(current_user.id) %>
<% else %>
<%= link_to "新規登録", new_user_registration_path %>
<%= link_to "ログイン", new_user_session_path %>
<% end %>
この使用例ではif user_signed_in?の直下にサインインしている人用のリンク、elseの下にはif user_signed_in?でfalseを返したときサインインしていない人が見れるリンクがコードされています。
viewページだと、サインインしている人とそうでない人の画面表示の違いをだせます。
ほかにもゲストログインユーザーには見せないようにしたい時にも使えます!
form_withのアクションによる違い
超初心者の私から言わせていただくと、form_withは新規投稿や編集のときに使うものぐらいに思っていました。もちろんそうではありますが、実際はモデルの中の変数に新しい情報を渡すか、既存のidに情報があるものにさらに情報を渡しているかどうかというところでnewアクションかupdateアクションか決まります。使用例はこちらです。
<%= form_with model: @xxx do |f| %>
<div class="form-group">
<%= f.label :title %>
<%= f.text_field :title %>
</div>
<div class="form-group">
<%= f.label :opinion %>
<%= f.text_area :body %>
</div>
<div class="form-group">
<%= f.submit %>
</div>
<% end %>
これは新規投稿と編集の部分テンプレートになっています。新規投稿と編集で別々にコードを書いても良いですが、上記の説明の通り全くおなじコードを使っていても情報を受け渡す際にアクションが選別されるため、部分テンプレートとして作成した方が効率が上がります。
参考にした記事はこちらです。form_withとform_forの違いも載っていますので是非!
さいごに
中学生の時以来久しぶりにブログを書きましたが、アウトプットすると情報が整理されて今まで以上に学習が定着しているように感じました!今回のようにその日に解決したことや調べたことはまとめていきたいと思います。温かい目で見守っていただけると幸いです。Markdown法ももう少し学んで読みやすい記事を書けるように頑張ります!