プログラミング勉強日記4(2/1-7)
プログラミングの勉強をし始めてから4週目になった。
【2/1-7】
週勉強時間:10時間56分
月合計勉強時間:10時間56分
合計勉強時間:44時間36分
休みの日が1日しかないことも影響し、先週より勉強時間を確保することができなかった。
毎日同じだけ勉強時間は確保できないが、少しでもいいから進めるということを大事にしたい。全くできない日があるとメンタルが落ちてくる原因にもなるため、自分のメンタルを安定させながら勉強時間を確保していきたい。
以下は日々の進捗具合や気づきのメモである。
2/1
体調不良で一日中寝込み、勉強ができなかった。この事実はメンタルを落ち込ませるので、自分で調整していきたい。
2/2
Progateの「Ruby on Rails5 学習コース VI」「Ruby on Rails5 学習コース VIII」を進める。
クリア扱いになったが、コードが適切でない箇所があった。
inputの初期値を設定する際、name属性を使ってしまっている。本来はvalue属性を使うべきところである。
以下メモ。
・マイグレーションファイルのみを作成する
コマンド「rails g migration ファイル名」を用いる。
→既に存在するテーブルの情報に変更を加える際に使用。
・マイグレーションファイルを編集する
テーブルに変更を加えるためには、マイグレーションファイルにあるchangeメソッドの中に変更内容を書く必要がある。
「rails db:migrate」コマンドはchangeメソッドの中身を実行するためのコマンド。
カラムを追加する場合は、「add_column :テーブル名, :カラム名, :データ型」を用いる。
・ビューに画像を表示する
HTMLの<img>タグを用いる。Rubyのコード部分は<%= %>で囲む必要があることに注意。
src属性の値は、「/フォルダ名/ファイル名」にする。
・画像の送信
<input>タグに「type="file"」を追加する。
form_tagに{multipart: true}を追加する。
・Rubyのコードでファイルを作成する
Rubyのコードでファイルを扱うには、Fileクラスを用いる。
ファイルを作成するためには、Fileクラスのwriteメソッドを使用する。「File.write(ファイルの場所, ファイルの中身)」
・ファイル名をデータベースに保存する
値を上書きする。ファイル名は「ユーザーのid.jpg」のようにする。
・画像の保存
File.binwriteを用いる。
File.binwrite("ファイルの場所", ファイルの中身※)
※readメソッドを使用する。
・パスワード用のフォームを追加する
inputタグのtype属性をpasswordにする。
・ログインするユーザーを特定する(メール・パスワード)
フォームに入力されたメールアドレスとパスワードはparams[:email]とparams[:password]で受け取ることができる。
・ログイン処理について
ページを移動してもユーザー情報を保持し続けるには、sessionという特殊な変数を用いる。
(例)session[:user_id] = @user.id
・ログアウト
session[:user_id]にnilを代入することで、session[:user_id]の値を空にすることができる(=ログアウトすることができる)。
・getとpostの使い分け(補足)
get:データベースを変更しない場合に使用
post:データベースを変更する場合、sessionの値を変更する場合に使用
2/3
引き続き「Ruby on Rails5 学習コース VIII」を進める。少し複雑になってきたような気がする。道場コースでどこまで定着できているか。
以下メモ。
・アクション側で共通の変数を定義する
各コントローラの全アクションで共通する処理がある場合には、before_actionを使う。before_actionを用いることで、アクションが呼び出される際に必ずbefore_actionの処理が実行される。
全てのコントローラで共通する処理はapplicationコントローラにまとめることができる。
・ログインしていない場合のアクセス制限
authenticate_userメソッドを作成する。
※authenticate_user:「ユーザーを認証する」という意味
・before_actionを特定のアクションのみで実行する
onlyを用いる。
(例)before_action :authenticate_user, {only: [:edit, :update]}
・ログインユーザーがアクセスできないページを作成する
forbid_login_userメソッドを作成する。
※forbid_login_user:「ログインユーザーを禁止する」という意味
・ユーザーの編集を制限する(アクション)
ensure_correct_userメソッドを作成する。
※ensure_correct_user:「正しいユーザーかを確かめる」という意味
・文字列を数値に変換する
to_iメソッドを用いる。
(例)if @current_user.id != params[:id].to_i
※「!=」は等しくないという意味の比較演算子。
2/4
「道場コース Ruby on Rails5 III」を進める。忘れている部分もあるため、道場コースを終えたら該当する箇所を復習していきたい。
2/5
「道場コース Ruby on Rails5 III」をクリア。しかし、大体は学習コースのスライドやメモを見てクリアしたので、もう一度復習として「学習コース Ruby on Rails5 VI」を進めることにした。
2/6
「学習コース Ruby on Rails5 VI」を進める。
2/7
「学習コース Ruby on Rails5 VII」を進める。
ユーザー名およびメールアドレスをoからaに変更しようとすると、以下のような画面が表示される。
なぜか空欄になってしまった。
原因はビューファイル内にある<input>のname属性が抜けていたためだった。
また、ユーザーの詳細ページに画像を表示させる課題でもミスがあった。
一見問題がなさそうに見えるが、コードに問題があった。
9行目のファイル名を記載する部分で、そのままファイル名を書いてしまった。デフォルトの画像しか表示されなくなってしまう。本来は「<img src="<%= "/user_images/#{user.image_name}" %>">」が正しい。
以下メモ。
・ユーザー登録時に初期画像を保存する
newメソッドの引数としてimage_nameを追加する。
・画像を保存する処理の実行
画像を保存する処理は、画像データが送信された場合だけ実行する。