プログラミング勉強日記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」を進める。

 クリア扱いになったが、コードが適切でない箇所があった。

f:id:uchi_hiro:20210202131821p:plain

 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」を進める。

f:id:uchi_hiro:20210207215305p:plain

ユーザー名およびメールアドレスをoからaに変更しようとすると、以下のような画面が表示される。

f:id:uchi_hiro:20210207215427p:plain

 なぜか空欄になってしまった。

 原因はビューファイル内にある<input>のname属性が抜けていたためだった。

 

  また、ユーザーの詳細ページに画像を表示させる課題でもミスがあった。

f:id:uchi_hiro:20210207223233p:plain

 一見問題がなさそうに見えるが、コードに問題があった。

f:id:uchi_hiro:20210207223321p:plain

9行目のファイル名を記載する部分で、そのままファイル名を書いてしまった。デフォルトの画像しか表示されなくなってしまう。本来は「<img src="<%= "/user_images/#{user.image_name}" %>">」が正しい。

 

以下メモ。

・ユーザー登録時に初期画像を保存する

newメソッドの引数としてimage_nameを追加する。

 

・画像を保存する処理の実行

画像を保存する処理は、画像データが送信された場合だけ実行する。