プログラミング勉強日記3(1/25-31)

 プログラミングの勉強をし始めてから3週目になった。

 

【1/25-31】

週勉強時間:12時間4分

合計勉強時間:33時間40分

 

 休みの日が多かったため、先週より勉強時間を確保できた。1週だけだと理解が追い付いていない部分もあったため、Progateの学習コース1週目→道場コース1週目→学習コース2週目→道場コース2週目という進め方をすることで、頭の中に定着するようになった。

 来週は休みの日がほぼないため、いかに仕事が終わった後に時間を確保できるかがカギになってくる。

 以下は日々の進捗具合や気づきのメモである。

 

1/25

 勉強を行わなかった。仕事休みの前日の夜はどうしても気が抜けてしまう。ネットサーフィンの時間をどう削れるかが問題。 

 

1/26

 引き続きProgateを進めていく。

 

以下メモ。

・ルーティングとアクションを追加するには

ルーティングには以下のコードを追加。

(例)aboutページを作成する場合:「get "about" => "home#about"」

コントローラーには以下のコードを追加。

(例)aboutページを作成する場合

def  about

end

ビューを追加する場合はファイルを追加する。

 

・画像を追加する

 public に保存。調べてみるとapp/assets/imagesに保存する場合もあるとのこと。publicはファイル名の前に/が必要だが、app/assets/imagesは画像ファイル名だけで問題ないらしい。その他にも違いがある。以下の記事も確認。

techblog.kyamanak.com

・HTMLファイルの中にRubyのコードを記述する

erb形式のファイルでは、<% %>で囲むことでRubyのコードを記述することができる。

 

Rubyコードをブラウザに表示する

<%= %>を用いる。

 

・変数の定義

一般的にはアクション内で定義する。

 

・アクションで定義した変数をビューで使用する

変数名を「@」で始める。

 

・テーブルについて

縦の列がカラム、横の列がレコード。

 

マイグレーションファイルの作成

(例)rails g model Post content:text

→contentはカラム名、textはデータ型で長い文字列をデータとして入れるときに使用。

 

・データベースに変更を反映する

rails db:migrateを実行する。

 

・モデル

ApplicationRecordを継承したクラス。

 

rails console

railsの環境で Ruby のコードを実行できるツール。

 

・テーブルにデータを追加する方法

① new メソッドで Post モデルのインスタンスを作成
② posts テーブルに保存

 

・テーブルにある最初のデータを取得する

firstメソッドを使用する。

 

・テーブルに保存されている全てのデータを取得する

Post.allを使用する。

 

・共通のレイアウトをまとめる

「views/layouts/application.html.erb」に共通のHTMLを書くことができる。各ビューファイルは、「views/layouts/application.html.erb」内にある<%= yield %>の部分に代入され、application.html.erbの一部としてブラウザに表示される。

 

・link_toメソッド

<a>タグを作成することができる。

(例)<%= link_to("About", "/about") %>

Aboutの部分が第一引数、/aboutの部分が第二引数。第一引数に表示させる文字、第二引数にURLをそれぞれ記載する。

 

・特定のidの投稿を取得する

find_byメソッドを使用する。

「モデル名.find_by(カラム名: 値)」とすることで、その値を持ったデータをデータベースから取得することができる。

 

・URLにidを含める

ルーティング

get "posts/:id" => "posts#show"

コントローラー

def show

end
「posts/:id」というルーティングは「posts/index」より下に書く。ルーティングは合致するURLを上から順に探す。「posts/index」よりも上に書くと、「localhost:3000/posts/index」というURLは「posts/:id」というルーティングとマッチしてしまう。

 

・paramsについて

Railsで送られたきた値を受け渡しするメソッド

params[:id]とすることで、ルーティングで設定したURLの「:id」の値を取得することができる。

 

1/27

 間違いがあったが動いてしまった。

f:id:uchi_hiro:20210127141350p:plain

 この状態だと、日付順で並ばなくなってしまう。こういった適切なコードではないのに求めている結果が出てしまうことに気を付けないといけない。

 

以下メモ。

・フォームの値を受け取る

ルーティングで「post」を使用する。

(例)post  "posts/create" => "posts#create"

 

・フォームに入力されたデータを送信する

form_tagメソッドを用いる。「form_tag(送信先のURL) do」という形で送信先のURLを指定する。

<textarea>タグにname属性を指定する。

※実際には送信先に対応するビューと投稿を保存する設定を行わないとフォームとして使えない。

※name属性はinputの場合も同様

 

・他のURLに転送する

redirect_toメソッドを用いる。「redirect_to(URL)」という形で転送することが可能。

 

・フォームに入力されたデータを受け取る

変数paramsで受け取る。paramsは<textarea>タグのname属性に設定した文字列をキーとしたハッシュになっている。

 

・取得したデータを並び替える

orderメソッドを用いる。「order(カラム名: 並び替えの順序)」という形で並び替えの順序を決める。順序は昇順(:asc)と降順(:desc)で指定可能。

 

・投稿一覧ページからリンクで投稿詳細ページへ移動する

(例)link_to(post.content, "/posts/#{post.id}")

 

・投稿を編集する

①編集したい投稿を取得

②その投稿のcontentの値を上書き

post.content = "新しい値"とすることで、上書きが可能。

③データベースに保存

 

・投稿を削除する

①データベースから削除したい投稿を取得。

②destroyメソッドを用いて投稿を削除。

(例)post.destroy

 

・投稿編集ページを作成する

投稿編集ページのURLに、編集したい投稿のidを入れる。

(例)get "posts/:id/edit" => "posts#edit"

 

・フォームに初期値を用意する

<textarea>タグの場合、「<textarea>初期値</textarea>」のようにタグで囲んだ部分を初期値として設定可能。

 

・投稿内容を更新する

①URLに含まれたidを用いて、データベースから投稿データを取得。

②フォームから編集内容を受け取り、投稿データを更新。

フォームから送信された値をparams[:content]で受け取り、@post.content = params[:content]で投稿データの内容を更新する。

 

★getとpostの使い分け

get:データベースを変更しないアクション

post:データベースを変更するアクション

 

・post用のリンクを作る

link_toの第三引数に「{method: "post"}」を追加する。

 

・バリデーションの書き方

「validates」を用いてカラム名と内容をモデルにて指定する。

(例)空の投稿を防ぐ場合

validates :content, {presence: true}

※バリデーション:不正なデータがデータベースに保存されないように、データをチェックする仕組み。バリデーションで検証する内容はハッシュとなっているため、コンマ( , )で区切ることで、複数指定することができる。

※presenceメソッド:オブジェクトが存在すればそのオブジェクトを返し、オブジェクトが存在しなければnilを返すメソッド。

 

・文字数のバリデーション

「length」を用いて{maximum: 数値}を指定することで、最大文字数を設定することができる。

(例)validates :content, {length: {maximum: 140}}

→最大文字数が140字になる。

 

・別のアクションを経由せずに、直接ビューを表示する

renderメソッドを用いる。render("フォルダ名/ファイル名")のように表示したいビューを指定する。

 

1/28

 「Ruby on Rails5 学習コース V」を進める。

  間違いがあったがクリアになってしまった。

f:id:uchi_hiro:20210128215957p:plain

<% end %>の位置が違うため、途中で処理が終了してしまい、送信ボタンを押しても投稿一覧ページにいかない。

 

以下メモ。

・フラッシュ

ページ上に1度だけ表示されるメッセージのこと。Railsでは変数flashが該当する。

(例)flash[:notice]

 

1/29

 勉強ができなかった。次の日が休みだと仕事の疲れと緊張からの解放でだらけてしまう。こういう日があると自己嫌悪に陥ってしまうので、勉強を続ける習慣を体になじませていきたい。 

 

1/30

 Progateを進めていく。復習をしていると見たことの無い表示に出くわした。

f:id:uchi_hiro:20210130120801p:plain

調べてみると、name属性の値が適切でなかったことで起こった現象だった。name属性の値が送信されるハッシュのキーになるため、キーが一致しないと上記のような形になるのだろう。

 

f:id:uchi_hiro:20210130120707p:plain

 上のように、name属性の値をいじると表示がおかしくなる(もともとはname="content"だった)。

 

以下メモ。

・エラーメッセージを配列で取得する

errors.full_messages

 

1/31

「道場コース Ruby on Rails5 II」の2週目をクリア。前回より理解が進んでいるため、詰まっている時間が少なくなった。

 しかし、「Ruby on Rails5 学習コース VI」に入ると1つ1つに時間がかかるようになった。前の単元で習ったことを用いながら行う必要があり、知識として一部曖昧なところがある。これは手を動かしながら覚えていくしかない。それでも、覚えているところがあるとうれしくなる。

 

以下メモ。

・モデルとテーブルの作成(2つのデータを持たせる)

(例)rails g model User カラム:データ型 カラム:データ型

string:短い文字列

※データベースに変更を反映させる:rails db:migrate

 

・バリデーション(値の重複に関するチェック)

「uniqueness: true」を用いる。

 

・フォームの初期値

<input>タグでは、value属性の値が初期値となる。

 

value属性にRubyを埋め込む

<%= %>を用いて「value="値"」の「" "」の中にRubyのコードを埋め込む。