アウトプット11/23

<今日のカリキュラム>

rubyドリル

・最終課題の商品出品機能の実装&コードレビュー**完成**

 

<メソッド整理など>

**マイグレーションファイルの修正**
マイグレーションファイルは基本は編集しない!!
編集するときは必ず**rollback**を行う必要がある。基本的にrollbackはすべてのマイグレーションファイルを戻してしてまうので、指定したいときは、
``` rails db:migrate:up VERSION=20080906120000 ```
と記述する。

**バリデーションは難しい**

商品管理機能で一番の山場はバリデーションだった。

qiita.com

validates :age, numericality: true

またnumericalityには便利なオプションが多数用意されています。

オプション 概要
:only_integer integerのみ
:greater_than 指定された値よりも大きいか
:greater_than_or_equal_to 指定された値と等しい、あるいは大きいか
:equal_to 指定された値と等しいか
:less_than 指定された値よりも小さいか
:less_than_or_equal_to 指定された値と等しいか、あるいは小さいか
:odd trueに設定した場合、奇数か
:even trueに設定した場合、偶数か

 

 

**numericalityとformatの違い**

価格のバリデーションで一番苦戦したところ。メンターさんに頼ってしまったのであとで調べなきゃ。。

 

**2重ハッシュの取り出し方**

user_data = [
{user: {profile: {name: 'George'}}},
{user: {profile: {name: 'Alice'}}},
{user: {profile: {name: 'Taro'}}},
]

この配列からnameキーだけを取り出したいときの方法。

[:user][:profile][:name]

この二重ハッシュだけではエラーが出る。なぜなら配列の中に複数のハッシュが格納されているので、これだけだとどのハッシュから取り出すのかが指示されていないのでエラーとなる。

配列の中に複数のハッシュがある場合には、each文を使って上述の二重ハッシュを各ハッシュで適用する以下の指示を行う必要がある。

user_data.each do |u|
puts u[:user][:profile][:name]
end

 

**herokuエラー**

ローカル環境では投稿ができていたのに、デプロイを行ったらエラーがでてしまう状況になってしまった。

色々苦戦したけれど、内容としては

*マイグレーションファイルの順番が違った*

ということ。itemテーブルにuserが紐ついているのに、ファイルの順番が、item user active_storage だったのでエラーが発生。順番は、~~item~~ user item  active_storage が正しかった模様。なぜかローカル環境ではうまく行ってので気が付かなかった。

マイグレーションファイルの順番を正しくした上で、

```

rails db:migrate:reset

```

を行うことで修正できた。

ちなみにメンターさんに教えてもらったheroku上でマイグレーションをリセットするコマンドは以下。

heroku run rails db:migrate:reset REILS_ENV=prodction DISABLE_DATABASE_ENVIRONMENT_CHECK=1

 

<分かっていなかったこと>

・ 

<理解していないこと>

 ・fill_inメソッド

・have_selector,have_contentの違い

 指定したセレクタがあるかないかを判断するマッチャがhave_selector。have_contentは指定した文字列があるかどうかを判断するマッチャ。

・sliceメソッドとslice!メソッド

 array.slice(1) →配列の中から1番目の数値を取り出す。但し配列に影響はない。

 array.slice!(1) →配列の中から1番目の数値を取り出す。取り出した数値は配列から削除される。

・afterメソッド 

 任意の処理の後に指定の処理を実行するメソッド。テストコードでFactoryBot後に画像を保存するコードを作るときなどに使用する。

・DOM

 ドキュメントオブジェクトモデルのこと。 HTMLを解析し、データを作成する仕組み。JavaScriptではHTMLを階層として捉えて変換したデータと捉え、そのHTMLの階層を取得し、操作することでプログラムを動かす言語。

XMLHttpRequest

 javascriptからAjaxによるリクエストを送るためのオブジェクトのこと。

・renderメソッド

 JSON形式でデータをサーバーから返却する際には、

 render json:{ post: post}

 とcreate定義に記載する。

・onload

 XMLHttpRequestで定義されているプロパティで、レスポンスの受信が成功した場合に呼び出されるイベントハンドラーのこと。

 ・セッションとクッキー

  webサービスにおいて情報を一時的に保存しておく仕組み。セッションがハッシュの形式でクッキーという保存場所に保存される。

・before_action

 コントローラーで処理が被っているときに使用する。具体的には、同じ記述を別のメソッドで定義し、アクションの実行前にbefore_actionを実行させることで記述内容の重複を避ける。

・テーブルにカラムを追加

 rails g migration Addカラム名Toテーブル名 追加するカラム型:型

・<em>タグ

 斜線で強調するタグ

・devise_parameter_sanitizerメソッド(2回目!)

 deviseにおけるparamsのようなもの。deviseGem時に自分で新しく設定したカラムもストロングパラメーターに含めることが可能(nicknameなど)。application_controller.rbに記載する。

・mergeメソッド(2回目!)

 ハッシュを結合させるメソッド。使い方は、投稿に関するハッシュとログインユーザーのハッシュを結合させて、投稿とユーザーを紐つけるときに使う。

・N+1問題(2回目!)

 アソシエーションによる該当箇所への複数アクセスが起こってしまう問題。解決策はincludesメソッドによる該当モデルの一括取得(コントローラーに「モデル名.includes(:紐付くモデル名)」と記述。)。

・case文

 ifを使わない条件分岐

case 対象のオブジェクトや式
when 値1
 # 値1に一致する場合に実行する処理
when 値2
 # 値2に一致する場合に実行する処理
else
 # どれにも一致しない場合に実行する処理
end

・whereメソッドとLIKE句

「c」が含まれるタイトルの検索方法は、

 where('title LIKE(?)', "%c%")

 検索機能の実装で使うメソッドでモデルに記述する。

・ルーティングのネスト(2回目!)

 あるモデルと紐ついている別のモデルのid情報をパラメーターに含めるためにネストさせる。

 resources :親となるコントローラー do
  resources :子となるコントローラー
 end

rails_12factor

 Herokuでデプロイする場合に必要。Gemfileに以下の記述を追加し、 bundle installする。
 group :production do
  gem 'rails_12factor'
 end

・heroku addons:add cleardb

 herokuのデフォルトデータベースはPostgreSQLというデータベースなのでMySQLに変更するため

・外部キー制約(2回目!

 外部キーに対応するデータが必ず存在しなければならないという制約。マイグレーションファイルに「foreign_key: true」と記述する.

・not null制約

 テーブルに空の値が入らないように制限する。マイグレーションファイルに「null: false」と記述する。

・Devise

 カラム名はデフォルトで「encrypted_password」となる。

・テーブルの型

 生年月日はdate型で保存。

 長い文章はtext型。

 金額などの数値はinteger型。

・Active Storage

 ファイルアップデートを簡単に実装できるGem。画像を保存するテーブルは自動で形成されるので自分でテーブルを作る必要はなし。

・utf8

 database.ymlにはデフォルトで「utf8mb4」でデータサイズに制限がかかっているので「utf8」に変更する。

・devise

 パスワードの6文字制限はデフォルトで実装されているのでバリデーションでlengthを定義する必要はなし。

・文字列変換

 .to_i→数値変換、.to_s→文字列変換

参考)chompメソッドは、文字列が使用できるメソッド。
chompメソッドを使用すると、文字列の末尾に存在する改行を取り除いた文字列を返してくれます。

・正常系・異常系テストコードは分けて記載する。

 

<気付き>

3連休は結構勉強できてよかったなー。商品投稿機能がまさかの1回でLGTMをもらえたのは嬉しかった。

今週で、軽いとされている**商品一覧機能** **詳細表示機能** **情報編集機能** をできるところまで進めたい。

あと、マークダウン語法を今回から試してみた。プログラマーっぽくていい感じなので今後覚えていきたい。

アウトプット11/19

<今日のカリキュラム>

rubyドリル

・最終課題の商品出品機能の実装

 

<メソッド整理など>

 

<分かっていなかったこと>

ruby語法 \n

 改行を行う。

 

<理解していないこと>

 ・fill_inメソッド

・have_selector,have_contentの違い

 指定したセレクタがあるかないかを判断するマッチャがhave_selector。have_contentは指定した文字列があるかどうかを判断するマッチャ。

・sliceメソッドとslice!メソッド

 array.slice(1) →配列の中から1番目の数値を取り出す。但し配列に影響はない。

 array.slice!(1) →配列の中から1番目の数値を取り出す。取り出した数値は配列から削除される。

・afterメソッド 

 任意の処理の後に指定の処理を実行するメソッド。テストコードでFactoryBot後に画像を保存するコードを作るときなどに使用する。

・DOM

 ドキュメントオブジェクトモデルのこと。 HTMLを解析し、データを作成する仕組み。JavaScriptではHTMLを階層として捉えて変換したデータと捉え、そのHTMLの階層を取得し、操作することでプログラムを動かす言語。

XMLHttpRequest

 javascriptからAjaxによるリクエストを送るためのオブジェクトのこと。

・renderメソッド

 JSON形式でデータをサーバーから返却する際には、

 render json:{ post: post}

 とcreate定義に記載する。

・onload

 XMLHttpRequestで定義されているプロパティで、レスポンスの受信が成功した場合に呼び出されるイベントハンドラーのこと。

 ・セッションとクッキー

  webサービスにおいて情報を一時的に保存しておく仕組み。セッションがハッシュの形式でクッキーという保存場所に保存される。

・before_action

 コントローラーで処理が被っているときに使用する。具体的には、同じ記述を別のメソッドで定義し、アクションの実行前にbefore_actionを実行させることで記述内容の重複を避ける。

・テーブルにカラムを追加

 rails g migration Addカラム名Toテーブル名 追加するカラム型:型

・<em>タグ

 斜線で強調するタグ

・devise_parameter_sanitizerメソッド(2回目!)

 deviseにおけるparamsのようなもの。deviseGem時に自分で新しく設定したカラムもストロングパラメーターに含めることが可能(nicknameなど)。application_controller.rbに記載する。

・mergeメソッド(2回目!)

 ハッシュを結合させるメソッド。使い方は、投稿に関するハッシュとログインユーザーのハッシュを結合させて、投稿とユーザーを紐つけるときに使う。

・N+1問題(2回目!)

 アソシエーションによる該当箇所への複数アクセスが起こってしまう問題。解決策はincludesメソッドによる該当モデルの一括取得(コントローラーに「モデル名.includes(:紐付くモデル名)」と記述。)。

・case文

 ifを使わない条件分岐

case 対象のオブジェクトや式
when 値1
 # 値1に一致する場合に実行する処理
when 値2
 # 値2に一致する場合に実行する処理
else
 # どれにも一致しない場合に実行する処理
end

・whereメソッドとLIKE句

「c」が含まれるタイトルの検索方法は、

 where('title LIKE(?)', "%c%")

 検索機能の実装で使うメソッドでモデルに記述する。

・ルーティングのネスト(2回目!)

 あるモデルと紐ついている別のモデルのid情報をパラメーターに含めるためにネストさせる。

 resources :親となるコントローラー do
  resources :子となるコントローラー
 end

rails_12factor

 Herokuでデプロイする場合に必要。Gemfileに以下の記述を追加し、 bundle installする。
 group :production do
  gem 'rails_12factor'
 end

・heroku addons:add cleardb

 herokuのデフォルトデータベースはPostgreSQLというデータベースなのでMySQLに変更するため

・外部キー制約(2回目!

 外部キーに対応するデータが必ず存在しなければならないという制約。マイグレーションファイルに「foreign_key: true」と記述する.

・not null制約

 テーブルに空の値が入らないように制限する。マイグレーションファイルに「null: false」と記述する。

・Devise

 カラム名はデフォルトで「encrypted_password」となる。

・テーブルの型

 生年月日はdate型で保存。

 長い文章はtext型。

 金額などの数値はinteger型。

・Active Storage

 ファイルアップデートを簡単に実装できるGem。画像を保存するテーブルは自動で形成されるので自分でテーブルを作る必要はなし。

・utf8

 database.ymlにはデフォルトで「utf8mb4」でデータサイズに制限がかかっているので「utf8」に変更する。

・devise

 パスワードの6文字制限はデフォルトで実装されているのでバリデーションでlengthを定義する必要はなし。

・文字列変換

 .to_i→数値変換、.to_s→文字列変換

参考)chompメソッドは、文字列が使用できるメソッド。
chompメソッドを使用すると、文字列の末尾に存在する改行を取り除いた文字列を返してくれます。

・正常系・異常系テストコードは分けて記載する。

 

<気付き>

rubyドリルが重かった。。商品出品機能の実装を開始したので、手順を決めながら進めていきたい。

大まかには、

・商品投稿機能への変遷

・データの保存

・ログインの有無による条件設定

ぐらいかな。。まだイメージが沸かないけど頑張る。

アウトプット11/18

<今日のカリキュラム>

rubyドリル

・最終課題のユーザー管理機能の実装

 

<メソッド整理など>

・with_optionsメソッド

 バリデーションをまとめて設定できることができる。

 with_options presence: true do(←値が存在する)
  validates :nickname, :birthday
 end

・rand(欲しい乱数の数)メソッド

 ランダムに「乱数の数-1」を返す。

 

<分かっていなかったこと>

・devise

 パスワードの6文字制限はデフォルトで実装されているのでバリデーションでlengthを定義する必要はなし。

・文字列変換

 .to_i→数値変換、.to_s→文字列変換

参考)chompメソッドは、文字列が使用できるメソッド。
chompメソッドを使用すると、文字列の末尾に存在する改行を取り除いた文字列を返してくれます。

・正常系・異常系テストコードは分けて記載する。

 

<理解していないこと>

 ・fill_inメソッド

・have_selector,have_contentの違い

 指定したセレクタがあるかないかを判断するマッチャがhave_selector。have_contentは指定した文字列があるかどうかを判断するマッチャ。

・sliceメソッドとslice!メソッド

 array.slice(1) →配列の中から1番目の数値を取り出す。但し配列に影響はない。

 array.slice!(1) →配列の中から1番目の数値を取り出す。取り出した数値は配列から削除される。

・afterメソッド 

 任意の処理の後に指定の処理を実行するメソッド。テストコードでFactoryBot後に画像を保存するコードを作るときなどに使用する。

・DOM

 ドキュメントオブジェクトモデルのこと。 HTMLを解析し、データを作成する仕組み。JavaScriptではHTMLを階層として捉えて変換したデータと捉え、そのHTMLの階層を取得し、操作することでプログラムを動かす言語。

XMLHttpRequest

 javascriptからAjaxによるリクエストを送るためのオブジェクトのこと。

・renderメソッド

 JSON形式でデータをサーバーから返却する際には、

 render json:{ post: post}

 とcreate定義に記載する。

・onload

 XMLHttpRequestで定義されているプロパティで、レスポンスの受信が成功した場合に呼び出されるイベントハンドラーのこと。

 ・セッションとクッキー

  webサービスにおいて情報を一時的に保存しておく仕組み。セッションがハッシュの形式でクッキーという保存場所に保存される。

・before_action

 コントローラーで処理が被っているときに使用する。具体的には、同じ記述を別のメソッドで定義し、アクションの実行前にbefore_actionを実行させることで記述内容の重複を避ける。

・テーブルにカラムを追加

 rails g migration Addカラム名Toテーブル名 追加するカラム型:型

・<em>タグ

 斜線で強調するタグ

・devise_parameter_sanitizerメソッド(2回目!)

 deviseにおけるparamsのようなもの。deviseGem時に自分で新しく設定したカラムもストロングパラメーターに含めることが可能(nicknameなど)。application_controller.rbに記載する。

・mergeメソッド(2回目!)

 ハッシュを結合させるメソッド。使い方は、投稿に関するハッシュとログインユーザーのハッシュを結合させて、投稿とユーザーを紐つけるときに使う。

・N+1問題(2回目!)

 アソシエーションによる該当箇所への複数アクセスが起こってしまう問題。解決策はincludesメソッドによる該当モデルの一括取得(コントローラーに「モデル名.includes(:紐付くモデル名)」と記述。)。

・case文

 ifを使わない条件分岐

case 対象のオブジェクトや式
when 値1
 # 値1に一致する場合に実行する処理
when 値2
 # 値2に一致する場合に実行する処理
else
 # どれにも一致しない場合に実行する処理
end

・whereメソッドとLIKE句

「c」が含まれるタイトルの検索方法は、

 where('title LIKE(?)', "%c%")

 検索機能の実装で使うメソッドでモデルに記述する。

・ルーティングのネスト(2回目!)

 あるモデルと紐ついている別のモデルのid情報をパラメーターに含めるためにネストさせる。

 resources :親となるコントローラー do
  resources :子となるコントローラー
 end

rails_12factor

 Herokuでデプロイする場合に必要。Gemfileに以下の記述を追加し、 bundle installする。
 group :production do
  gem 'rails_12factor'
 end

・heroku addons:add cleardb

 herokuのデフォルトデータベースはPostgreSQLというデータベースなのでMySQLに変更するため

・外部キー制約(2回目!

 外部キーに対応するデータが必ず存在しなければならないという制約。マイグレーションファイルに「foreign_key: true」と記述する.

・not null制約

 テーブルに空の値が入らないように制限する。マイグレーションファイルに「null: false」と記述する。

・Devise

 カラム名はデフォルトで「encrypted_password」となる。

・テーブルの型

 生年月日はdate型で保存。

 長い文章はtext型。

 金額などの数値はinteger型。

・Active Storage

 ファイルアップデートを簡単に実装できるGem。画像を保存するテーブルは自動で形成されるので自分でテーブルを作る必要はなし。

・utf8

 database.ymlにはデフォルトで「utf8mb4」でデータサイズに制限がかかっているので「utf8」に変更する。

 

<気付き>

ユーザー管理機能のコードレビュー完了!デプロイ後に少しエラーがでたけどmigrateして解決。明日からは商品出品機能を実装していきたい。目標は日曜日午前中にコードレビュー依頼し、月曜にレビューを完了すること。

アウトプット11/16

<今日のカリキュラム>

rubyドリル

・最終課題のユーザー管理機能の実装

 

<メソッド整理など>

now = Time.new
puts "現在は西暦#{now.year}年#{now.month}月#{now.day}日"
week = ["日","月","火","水","木","金","土"]
puts week[now.wday] + '曜日です'

puts now.wday

 

<分かっていなかったこと>

・テストコード

 テストするカラムはit1つにつき1つまで。”本名”と”名前”のテストは分ける必要がある。

 

<理解していないこと>

 ・fill_inメソッド

・have_selector,have_contentの違い

 指定したセレクタがあるかないかを判断するマッチャがhave_selector。have_contentは指定した文字列があるかどうかを判断するマッチャ。

・sliceメソッドとslice!メソッド

 array.slice(1) →配列の中から1番目の数値を取り出す。但し配列に影響はない。

 array.slice!(1) →配列の中から1番目の数値を取り出す。取り出した数値は配列から削除される。

・afterメソッド 

 任意の処理の後に指定の処理を実行するメソッド。テストコードでFactoryBot後に画像を保存するコードを作るときなどに使用する。

・DOM

 ドキュメントオブジェクトモデルのこと。 HTMLを解析し、データを作成する仕組み。JavaScriptではHTMLを階層として捉えて変換したデータと捉え、そのHTMLの階層を取得し、操作することでプログラムを動かす言語。

XMLHttpRequest

 javascriptからAjaxによるリクエストを送るためのオブジェクトのこと。

・renderメソッド

 JSON形式でデータをサーバーから返却する際には、

 render json:{ post: post}

 とcreate定義に記載する。

・onload

 XMLHttpRequestで定義されているプロパティで、レスポンスの受信が成功した場合に呼び出されるイベントハンドラーのこと。

 ・セッションとクッキー

  webサービスにおいて情報を一時的に保存しておく仕組み。セッションがハッシュの形式でクッキーという保存場所に保存される。

・before_action

 コントローラーで処理が被っているときに使用する。具体的には、同じ記述を別のメソッドで定義し、アクションの実行前にbefore_actionを実行させることで記述内容の重複を避ける。

・テーブルにカラムを追加

 rails g migration Addカラム名Toテーブル名 追加するカラム型:型

・<em>タグ

 斜線で強調するタグ

・devise_parameter_sanitizerメソッド(2回目!)

 deviseにおけるparamsのようなもの。deviseGem時に自分で新しく設定したカラムもストロングパラメーターに含めることが可能(nicknameなど)。application_controller.rbに記載する。

・mergeメソッド(2回目!)

 ハッシュを結合させるメソッド。使い方は、投稿に関するハッシュとログインユーザーのハッシュを結合させて、投稿とユーザーを紐つけるときに使う。

・N+1問題(2回目!)

 アソシエーションによる該当箇所への複数アクセスが起こってしまう問題。解決策はincludesメソッドによる該当モデルの一括取得(コントローラーに「モデル名.includes(:紐付くモデル名)」と記述。)。

・case文

 ifを使わない条件分岐

case 対象のオブジェクトや式
when 値1
 # 値1に一致する場合に実行する処理
when 値2
 # 値2に一致する場合に実行する処理
else
 # どれにも一致しない場合に実行する処理
end

・whereメソッドとLIKE句

「c」が含まれるタイトルの検索方法は、

 where('title LIKE(?)', "%c%")

 検索機能の実装で使うメソッドでモデルに記述する。

・ルーティングのネスト(2回目!)

 あるモデルと紐ついている別のモデルのid情報をパラメーターに含めるためにネストさせる。

 resources :親となるコントローラー do
  resources :子となるコントローラー
 end

rails_12factor

 Herokuでデプロイする場合に必要。Gemfileに以下の記述を追加し、 bundle installする。
 group :production do
  gem 'rails_12factor'
 end

・heroku addons:add cleardb

 herokuのデフォルトデータベースはPostgreSQLというデータベースなのでMySQLに変更するため

・外部キー制約(2回目!

 外部キーに対応するデータが必ず存在しなければならないという制約。マイグレーションファイルに「foreign_key: true」と記述する.

・not null制約

 テーブルに空の値が入らないように制限する。マイグレーションファイルに「null: false」と記述する。

・Devise

 カラム名はデフォルトで「encrypted_password」となる。

・テーブルの型

 生年月日はdate型で保存。

 長い文章はtext型。

 金額などの数値はinteger型。

・Active Storage

 ファイルアップデートを簡単に実装できるGem。画像を保存するテーブルは自動で形成されるので自分でテーブルを作る必要はなし。

・utf8

 database.ymlにはデフォルトで「utf8mb4」でデータサイズに制限がかかっているので「utf8」に変更する。

 

<気付き>

早速のレビューを受けて修正!テストコードの書き方指導がありがたい。

アウトプット11/15

<今日のカリキュラム>

・最終課題のユーザー管理機能の実装

 

<メソッド整理など>

 

<分かっていなかったこと>

・utf8

 database.ymlにはデフォルトで「utf8mb4」でデータサイズに制限がかかっているので「utf8」に変更する。

 

<理解していないこと>

 ・fill_inメソッド

・have_selector,have_contentの違い

 指定したセレクタがあるかないかを判断するマッチャがhave_selector。have_contentは指定した文字列があるかどうかを判断するマッチャ。

・sliceメソッドとslice!メソッド

 array.slice(1) →配列の中から1番目の数値を取り出す。但し配列に影響はない。

 array.slice!(1) →配列の中から1番目の数値を取り出す。取り出した数値は配列から削除される。

・afterメソッド 

 任意の処理の後に指定の処理を実行するメソッド。テストコードでFactoryBot後に画像を保存するコードを作るときなどに使用する。

・DOM

 ドキュメントオブジェクトモデルのこと。 HTMLを解析し、データを作成する仕組み。JavaScriptではHTMLを階層として捉えて変換したデータと捉え、そのHTMLの階層を取得し、操作することでプログラムを動かす言語。

XMLHttpRequest

 javascriptからAjaxによるリクエストを送るためのオブジェクトのこと。

・renderメソッド

 JSON形式でデータをサーバーから返却する際には、

 render json:{ post: post}

 とcreate定義に記載する。

・onload

 XMLHttpRequestで定義されているプロパティで、レスポンスの受信が成功した場合に呼び出されるイベントハンドラーのこと。

 ・セッションとクッキー

  webサービスにおいて情報を一時的に保存しておく仕組み。セッションがハッシュの形式でクッキーという保存場所に保存される。

・before_action

 コントローラーで処理が被っているときに使用する。具体的には、同じ記述を別のメソッドで定義し、アクションの実行前にbefore_actionを実行させることで記述内容の重複を避ける。

・テーブルにカラムを追加

 rails g migration Addカラム名Toテーブル名 追加するカラム型:型

・<em>タグ

 斜線で強調するタグ

・devise_parameter_sanitizerメソッド(2回目!)

 deviseにおけるparamsのようなもの。deviseGem時に自分で新しく設定したカラムもストロングパラメーターに含めることが可能(nicknameなど)。application_controller.rbに記載する。

・mergeメソッド(2回目!)

 ハッシュを結合させるメソッド。使い方は、投稿に関するハッシュとログインユーザーのハッシュを結合させて、投稿とユーザーを紐つけるときに使う。

・N+1問題(2回目!)

 アソシエーションによる該当箇所への複数アクセスが起こってしまう問題。解決策はincludesメソッドによる該当モデルの一括取得(コントローラーに「モデル名.includes(:紐付くモデル名)」と記述。)。

・case文

 ifを使わない条件分岐

case 対象のオブジェクトや式
when 値1
 # 値1に一致する場合に実行する処理
when 値2
 # 値2に一致する場合に実行する処理
else
 # どれにも一致しない場合に実行する処理
end

・whereメソッドとLIKE句

「c」が含まれるタイトルの検索方法は、

 where('title LIKE(?)', "%c%")

 検索機能の実装で使うメソッドでモデルに記述する。

・ルーティングのネスト(2回目!)

 あるモデルと紐ついている別のモデルのid情報をパラメーターに含めるためにネストさせる。

 resources :親となるコントローラー do
  resources :子となるコントローラー
 end

rails_12factor

 Herokuでデプロイする場合に必要。Gemfileに以下の記述を追加し、 bundle installする。
 group :production do
  gem 'rails_12factor'
 end

・heroku addons:add cleardb

 herokuのデフォルトデータベースはPostgreSQLというデータベースなのでMySQLに変更するため

・外部キー制約(2回目!

 外部キーに対応するデータが必ず存在しなければならないという制約。マイグレーションファイルに「foreign_key: true」と記述する.

・not null制約

 テーブルに空の値が入らないように制限する。マイグレーションファイルに「null: false」と記述する。

・Devise

 カラム名はデフォルトで「encrypted_password」となる。

・テーブルの型

 生年月日はdate型で保存。

 長い文章はtext型。

 金額などの数値はinteger型。

・Active Storage

 ファイルアップデートを簡単に実装できるGem。画像を保存するテーブルは自動で形成されるので自分でテーブルを作る必要はなし。

 

<気付き>

土日をほぼ費やしてなんとか目標のユーザー管理機能の実装コードレビューまでたどり着いた。

めっちゃ色々苦戦したけどなんとか形になって自信になった。今週はコードレビューとの闘いになりそう。

アウトプット11/12

<今日のカリキュラム>

・最終課題のデータベース設計

・Active_Hash

 

<メソッド整理など>

・Active_Hash

 セレクトボックスのように変更されないデータをモデルファイル(今回はgenreモデル)内に直接記述して、データベースを介さずに取り扱えるGemのこと。

 まずはGemfileに「gem 'active_hash'」と記載してbundle install

・collection_select(HTML)

 データをプルダウン形式で表示することができるメソッド。記述法は以下。

<%= form.collection_select(

 保存先のカラム名,

 オブジェクトの配列,

 カラムに保存される項目,

 選択肢に表示されるカラム名,

 オプション,

 htmlオプション

 ) %>

rails db:migrate:reset

 データベースの削除とマイグレーションをやり直すコマンド

<分かっていなかったこと>

 

 

<理解していないこと>

 ・fill_inメソッド

・have_selector,have_contentの違い

 指定したセレクタがあるかないかを判断するマッチャがhave_selector。have_contentは指定した文字列があるかどうかを判断するマッチャ。

・sliceメソッドとslice!メソッド

 array.slice(1) →配列の中から1番目の数値を取り出す。但し配列に影響はない。

 array.slice!(1) →配列の中から1番目の数値を取り出す。取り出した数値は配列から削除される。

・afterメソッド 

 任意の処理の後に指定の処理を実行するメソッド。テストコードでFactoryBot後に画像を保存するコードを作るときなどに使用する。

・DOM

 ドキュメントオブジェクトモデルのこと。 HTMLを解析し、データを作成する仕組み。JavaScriptではHTMLを階層として捉えて変換したデータと捉え、そのHTMLの階層を取得し、操作することでプログラムを動かす言語。

XMLHttpRequest

 javascriptからAjaxによるリクエストを送るためのオブジェクトのこと。

・renderメソッド

 JSON形式でデータをサーバーから返却する際には、

 render json:{ post: post}

 とcreate定義に記載する。

・onload

 XMLHttpRequestで定義されているプロパティで、レスポンスの受信が成功した場合に呼び出されるイベントハンドラーのこと。

 ・セッションとクッキー

  webサービスにおいて情報を一時的に保存しておく仕組み。セッションがハッシュの形式でクッキーという保存場所に保存される。

・before_action

 コントローラーで処理が被っているときに使用する。具体的には、同じ記述を別のメソッドで定義し、アクションの実行前にbefore_actionを実行させることで記述内容の重複を避ける。

・テーブルにカラムを追加

 rails g migration Addカラム名Toテーブル名 追加するカラム型:型

・<em>タグ

 斜線で強調するタグ

・devise_parameter_sanitizerメソッド(2回目!)

 deviseにおけるparamsのようなもの。deviseGem時に自分で新しく設定したカラムもストロングパラメーターに含めることが可能(nicknameなど)。application_controller.rbに記載する。

・mergeメソッド(2回目!)

 ハッシュを結合させるメソッド。使い方は、投稿に関するハッシュとログインユーザーのハッシュを結合させて、投稿とユーザーを紐つけるときに使う。

・N+1問題(2回目!)

 アソシエーションによる該当箇所への複数アクセスが起こってしまう問題。解決策はincludesメソッドによる該当モデルの一括取得(コントローラーに「モデル名.includes(:紐付くモデル名)」と記述。)。

・case文

 ifを使わない条件分岐

case 対象のオブジェクトや式
when 値1
 # 値1に一致する場合に実行する処理
when 値2
 # 値2に一致する場合に実行する処理
else
 # どれにも一致しない場合に実行する処理
end

・whereメソッドとLIKE句

「c」が含まれるタイトルの検索方法は、

 where('title LIKE(?)', "%c%")

 検索機能の実装で使うメソッドでモデルに記述する。

・ルーティングのネスト(2回目!)

 あるモデルと紐ついている別のモデルのid情報をパラメーターに含めるためにネストさせる。

 resources :親となるコントローラー do
  resources :子となるコントローラー
 end

rails_12factor

 Herokuでデプロイする場合に必要。Gemfileに以下の記述を追加し、 bundle installする。
 group :production do
  gem 'rails_12factor'
 end

・heroku addons:add cleardb

 herokuのデフォルトデータベースはPostgreSQLというデータベースなのでMySQLに変更するため

・外部キー制約(2回目!

 外部キーに対応するデータが必ず存在しなければならないという制約。マイグレーションファイルに「foreign_key: true」と記述する.

・not null制約

 テーブルに空の値が入らないように制限する。マイグレーションファイルに「null: false」と記述する。

・Devise

 カラム名はデフォルトで「encrypted_password」となる。

・テーブルの型

 生年月日はdate型で保存。

 長い文章はtext型。

 金額などの数値はinteger型。

・Active Storage

 ファイルアップデートを簡単に実装できるGem。画像を保存するテーブルは自動で形成されるので自分でテーブルを作る必要はなし。

 

<気付き>

データベース作成で結構メンターさんとラリーしてしまった。聞けばわかるけど自分では思いつかない状態が気持ち悪い。数をこなして早くなれたい。

アウトプット11/11

<今日のカリキュラム>

・最終課題のデータベース設計

 

<メソッド整理など>

・.absメソッド

 絶対値を返す。−5を5のように。

・Devise

 カラム名はデフォルトで「encrypted_password」となる。

・テーブルの型

 生年月日はdate型で保存。

 長い文章はtext型。

 金額などの数値はinteger型。

・Active Storage

 ファイルアップデートを簡単に実装できるGem。画像を保存するテーブルは自動で形成されるので自分でテーブルを作る必要はなし。

 

<分かっていなかったこと>

・外部キー制約(2回目!

 外部キーに対応するデータが必ず存在しなければならないという制約。マイグレーションファイルに「foreign_key: true」と記述する.

・not null制約

 テーブルに空の値が入らないように制限する。マイグレーションファイルに「null: false」と記述する。

 

<理解していないこと>

 ・fill_inメソッド

・have_selector,have_contentの違い

 指定したセレクタがあるかないかを判断するマッチャがhave_selector。have_contentは指定した文字列があるかどうかを判断するマッチャ。

・sliceメソッドとslice!メソッド

 array.slice(1) →配列の中から1番目の数値を取り出す。但し配列に影響はない。

 array.slice!(1) →配列の中から1番目の数値を取り出す。取り出した数値は配列から削除される。

・afterメソッド 

 任意の処理の後に指定の処理を実行するメソッド。テストコードでFactoryBot後に画像を保存するコードを作るときなどに使用する。

・DOM

 ドキュメントオブジェクトモデルのこと。 HTMLを解析し、データを作成する仕組み。JavaScriptではHTMLを階層として捉えて変換したデータと捉え、そのHTMLの階層を取得し、操作することでプログラムを動かす言語。

XMLHttpRequest

 javascriptからAjaxによるリクエストを送るためのオブジェクトのこと。

・renderメソッド

 JSON形式でデータをサーバーから返却する際には、

 render json:{ post: post}

 とcreate定義に記載する。

・onload

 XMLHttpRequestで定義されているプロパティで、レスポンスの受信が成功した場合に呼び出されるイベントハンドラーのこと。

 ・セッションとクッキー

  webサービスにおいて情報を一時的に保存しておく仕組み。セッションがハッシュの形式でクッキーという保存場所に保存される。

・before_action

 コントローラーで処理が被っているときに使用する。具体的には、同じ記述を別のメソッドで定義し、アクションの実行前にbefore_actionを実行させることで記述内容の重複を避ける。

・テーブルにカラムを追加

 rails g migration Addカラム名Toテーブル名 追加するカラム型:型

・<em>タグ

 斜線で強調するタグ

・devise_parameter_sanitizerメソッド(2回目!)

 deviseにおけるparamsのようなもの。deviseGem時に自分で新しく設定したカラムもストロングパラメーターに含めることが可能(nicknameなど)。application_controller.rbに記載する。

・mergeメソッド(2回目!)

 ハッシュを結合させるメソッド。使い方は、投稿に関するハッシュとログインユーザーのハッシュを結合させて、投稿とユーザーを紐つけるときに使う。

・N+1問題(2回目!)

 アソシエーションによる該当箇所への複数アクセスが起こってしまう問題。解決策はincludesメソッドによる該当モデルの一括取得(コントローラーに「モデル名.includes(:紐付くモデル名)」と記述。)。

・case文

 ifを使わない条件分岐

case 対象のオブジェクトや式
when 値1
 # 値1に一致する場合に実行する処理
when 値2
 # 値2に一致する場合に実行する処理
else
 # どれにも一致しない場合に実行する処理
end

・whereメソッドとLIKE句

「c」が含まれるタイトルの検索方法は、

 where('title LIKE(?)', "%c%")

 検索機能の実装で使うメソッドでモデルに記述する。

・ルーティングのネスト(2回目!)

 あるモデルと紐ついている別のモデルのid情報をパラメーターに含めるためにネストさせる。

 resources :親となるコントローラー do
  resources :子となるコントローラー
 end

rails_12factor

 Herokuでデプロイする場合に必要。Gemfileに以下の記述を追加し、 bundle installする。
 group :production do
  gem 'rails_12factor'
 end

・heroku addons:add cleardb

 herokuのデフォルトデータベースはPostgreSQLというデータベースなのでMySQLに変更するため

 

 

<気付き>

レビューが返ってきて発見が沢山あったので、次に活かそうと思う。

最近ダラダラ残業が多いので、切り上げて学習時間を確保できるように頑張ろうと思う。