2023.10.09 学習記録
Rails基礎21の復習
クリアを急いでしまい理解していないままの部分が多々あるので、じっくり確認していく。
まずは復習ポイントを確認
あ、「Invalid Authentication Token」は出るものなんだ。良かった。なにか変なことやってるせいで出たのかと思ってた。
ただエラーの回避方法は私がやったのと違ううえに、詳しい解説がないな。後で調べよう。
とりあえず今は全部のポイントをざっと把握する。
解答例では/view/admin/layoutの中にadmin.html.erbを作ってるな。同じ構成にしよう。
あれ、復習ポイントこれだけ!?
マジか〜…まあまずは現時点で判明してる修正ポイントをIssueに追加しよう。
OK、とりあえず2つとも修正だけ先にしてしまおう。
レイアウトファイルはついでにファイル名も「/admin/layouts/application.html.erb」に変えよう。
管理者ユーザーかチェックするメソッドの名前も解答例に合わせて変える。
管理者ログイン画面のレイアウトファイルに以下のコードを追記。
<%= csrf_meta_tags %>
<%= csp_meta_tag %>
逆に/admin/user_sessionsコントローラに書いた以下のコードを削除。
protect_from_forgery except: :destroy
あ、しまったadmin_login.html.erb に<title>
タグ2つあることに今気づいた。いらない法消しとこ。
ん!?修正したらまたログアウトできなくなったぞ⁉
ええ〜なんで?
解答例のコードひと通り見てみるか…他のところでなにかやっちゃってるのかもしれん。
別件だけどadmin_login.html.erbの指定、普通にコントローラ単位で良かったんだなそういえば。解答例コード見て気づいた。これもついでに直しとこ。
あ、わかった。レイアウト指定してなかったからだたぶん(ログアウトのリンクにもdestroyアクションにも書いてなかった)。回避コード、修正前はuser_sessionsコントローラに書いてたから効いてたけど、レイアウトファイルの<head>
タグの中に移動したから適用されなかったんだ。
ビンゴ。レイアウト指定をコントローラ単位にしたらいけた。
よし、後は引き続き解答例コードを見て違うところを修正していこう。
CSSやJSなんかのアセット、個別に指定したい場合は基本「application.css(もしくは .js)の内容コピペ + 個別の分を@importで読み込む」という感じにすればいいんだな。
というかあれか。ビューではこれを読み込む!っていう代表ファイルを作って、その代表ファイルの中で他のファイルを@import
で読み込むっていう方式だな。代表ファイルにすべての読み込みたいファイルをインポートしておく。
というか代表ファイル=以前調べたアセットパイプラインにおけるマスターファイル??
まあいいや。ともかく基本的にはビューで読み込むCSSおよびJSファイルは一つにして、その一つの中に実際に必要なCSSおよびJSファイル群をインポートしておく、と理解しておこう。
解答例だとAdmin::BaseControllerでnot_authenticated
メソッドをオーバーライドしてるな、通常のログイン画面じゃなくて管理者ログイン画面にリダイレクトするように。
確かにadmin関連領域においてはそのほうが自然か。追記しておこう。
今日はここまで。明日も引き続き解答例を見ながらコードを修正していく。