11日目
今日の学習
Ruby on Rails
before_action
【Rails】 before_actionの使い方を徹底解説! | Pikawaka - ピカ1わかりやすいプログラミング用語サイト
Progateのときは、すごく何となくの理解で使っていたbefore_action。
同じ記述の処理をまとめ、リファクタリングする際にも使用することを学んだ。
同じコントローラ内に、使いまわしたい記述のメソッドを作成し、before_action メソッド名
のように使用する。
また、only
をつけることにより、特定のアクションのときのみbefore_action
を使用することができる。
反対に、except
を使用すれば、特定のアクションではbefore_action
を使わないようにする。
部分テンプレート
ビューファイルにて、同じような記述をしている箇所があれば、その部分を部分テンプレート
とすることにより共通化できる。
共通部分を、部分テンプレートファイルに移行しする。
部分テンプレートファイル名は、最初に_
で始める決まりがある。
例: _form.html.erb
ファイルを作成後、部分テンプレートを使用したい箇所に、 <%= render "_を除いたファイル名%>
を記述。
例: <%= render "form" %>
部分的に記述を変えたい場合も、変えたい部分を変数にして、<%= render "_を除いたファイル名%>
の後ろに記述をする。
link_toでdeleteが機能しない
Bootstrapの練習のために、簡単なメッセージ投稿アプリを作成していたのだが、削除ボタンを押しても記事が削除できない。
削除ボタンを押すと、詳細ページに飛んでしまう。
ページのソースから、削除ボタンを見てみても、data-method="delete"
となっている。
link_toで突然methodが効かなくなって困ってるあなたへ - Qiita
【Rails】link_toでdeleteが効かない時の解決方法 - Qiita
以下、下の記事から引用
HTTPメソッドにDELETEを指定しているにもかかわらずGETでリクエストが送られていることが原因
納得...。そして、こちらのサイトの通りに、app > javascript > packs > application.js
に、//= require jquery_ujs
と記載することで解決。
ちゃんと削除できるようになった...のだが、貼り付けてすぐは相変わらず削除できず、その後にあれこれ試しているうちにいつの間にか削除できるようになっていたので、結局何が決定打だったのかは分からなかった。
しかし、次にまた同じようなエラーが出てしまったとき、今回の経験を元に解決に当たってみようと思う。
削除できない!と気づいてから1時間半ほど格闘していたので、大変だった...。
やんばるエキスパートでは、20分分からなければ質問してくださいと言っていただけているが、もう少し調べれば分かるかもしれない!というのと、20分調べると知らない知識が出てきて、それを調べてまた時間経過...となっていくため、どの辺りで質問していいのかいまいちタイミングが分からない。
完全に同じ場所で20分止まってしまったときには、頼らせていただきたい。
今回のことで、javascript周りの知識が皆無のため、そこもしっかり勉強する必要があるなと思った。
Progateでjavascriptの学習を、一度完走はできたもののアロー関数あたりで自分の理解が限界になってしまったが、当時は引数?なんだそれはというレベルだったので、今もう一度学習してみると以前よりも理解できる可能性が高い。
学習メモ
- フラッシュの設定は、リダイレクトと併用する場合はまとめて記述できる
redirect_to post, notice: "投稿しました"
- フラッシュは、成功時は
notice
失敗時や削除時はalert
を使う - バリデーションエラー時にレンダリングをして、フラッシュを設定する場合は
flash.now
を使う
レンダリングでflash
を使用すると、他のページに移動しても一度だけフラッシュが残ってしまうため link_to
にクラスをつける場合は、class: "クラス名"
*class= "クラス名"
ではないので注意Rails Best Practice
...コードをチェックできるgem
余談
はてなブログのテーマを変更しようと思い、自分はサイバーチックなものが大好きなので、それらしいデザインを探していた。
かっこいいが、可読性に欠けてしまうため、利用はやめておく……。
というか、なんでテーマ検索できないんだ?