勉強の日
10:04開始
ruby on railsって、内容の書き方はよく理解できていても、そこにたどり着くまでの設定とかがよくわかんなかったりする。
でも今日はテストコードを書くまでの準備段階が突然理解できたからそれをまとめておく。
<モデル単体のテストコードを書くときの手順>
①Gemfile …group :development, :test do内に追記
gem 'rspec-rails' …モデル単体はRSpecでテストコードを書く
gem 'factory_bot_rails' …繰り返し記載を避けるために使う
gem 'faker' …適当な名前やemailやパスワード等を用意してくれる
bundle install …①のgemをインストール
ctrl+c …gemを新しくインストールしたため、再起動してアプリに反映
rails s
rails g rspec:install …導入したrspecを使えるようにする
③.rspec
--format documentation …最終行に追記してテストコードの結果をターミナルで可視化する
rails g rspec:model モデル名(単) …spec/factories/モデル名(複).rb(⑤)とspec/models/モデル名(単)_spec.rb(⑦)を同時に作成
⑤spec/factories/モデル名(複).rb
FactoryBot.define do
factory :モデル名(単) do
Fackerを使ったテスト用データを書き込む
例:name {Faker::Name.last_name}
例:email {Faker::Internet.free_email}
例:password {Faker::Internet.password(min_length: 6)} ※バリデーションも付けられる
end
end
⑥テストコードのexample整理
⑦spec/models/モデル名(単)_spec.rb …⑥で整理したexampleを書いてテストコード記述
require 'rails_helper'
RSpec.describe モデル名(単), type: :model do
before do
インスタンス変数を設定して⑤の内容を呼び出す
例:@post = FactoryBot.build(:post)
end
describe 'タイトル' do
context '●●できる場合' do
it '●●が存在していれば保存できる' do
テストコード書く
(⑤の内容を使って、上手くいくよーなコードを書く)
例:expect(@post).to be_valid
end
end
context '●●できない場合' do
it '●●が空では保存できない' do
テストコード書く
(⑤の内容をダメな状態に再設定して、その状態だとどんなエラーになるかを書く)
例:@post.title = ''
例:@post.valid?
例:expect(@post.errors.full_messages).to include("Title can't be blank")
end
end
end
end
bundle exec rspec spec/models/モデル名(単)_spec.rb …テストコード実行して緑文字なら成功
今日がくるまでに応用が終わる予定だったんだけど、あと少し終わらず。
2-3日以内に発展に進みたいな。
このまま気分よく進めるようにがんばる!
遅れてる
5:03開始
今日も家のことやってからスタート。
プルダウンの理解に苦しんで、nameとかvalueとかがわかったようなわかっていないような。下記が今のところの理解。正しいか自信なくて問い合わせ中。
・select
プルダウン作るときの親要素。nameでparamの形を指定して一番の中身はその後のoptionで指定する
・option
プルダウンの選択肢。valueを指定すればその内容がparamsの中身になって、そうでなければoptionのテキストがparamsの中身になる
・input
コントローラーに送りたい内容を書く。上記と同じように、nameでparamsの形を指定して、valueで中身を書く。type="hidden"にすればウェブには表示されずに、データを送る機能だけ付けられる。
合ってますか?ここまで理解するのにもそこそこ時間を要したんだけどな。
今週中に応用が終わるように、どこかで時間作らなきゃな。がんばろ。
練習
5:03開始
今日も5時まで新学期準備。
・リンクのアンダーバーを消す
.class a { text-decoration: none; }
今日はビューの作成練習メインで、インプットよりアウトプット多くて楽しかった。
ただ、いつも解説とクラス名が異なっていて、後の確認作業が面倒にならないように、自分でクラス名設定しても解説見ながらカリキュラムに合わせてクラス名変更する作業が発生しちゃう。
あと .class{ } でなく .class a{ } を使おうという思考がなくて、解説見て理解できても実際自力で使うまでに至ってない気がする。
まぁでもこれも数こなすしかないのかな。がんばろ。
自分ノートの安心感
5:10開始
新学期準備を30分くらいしてから勉強開始。
githubを初めて学習したころのカリキュラムと現在進行形のカリキュラムを見比べながら進めていると、時間はかかってしまうけど理解度は結構違う。OneNoteに書いてなかった時期の範囲だから、特にちゃんと理解につながっている実感があって、自分がレベルアップしてるのを感じられて気分がいい。…から勉強が楽しくなって朝の準備の時間をおしてしまう^^;
・render
部分テンプレート適用時に使う。部分テンプレートの部品側は _名前.html.erb の名称のファイルで、完成形側は <%= render "部分テンプレート名" %> で部品部分のレイアウトをする。
あーこれやったなーと過去を振り返るよりも、現在の学習に専念よりも、今後オリジナルアプリの作成で使えそうな要素だなーと先を見ているような自分がいる不思議な感覚になった。
github苦手意識
4:50開始
次の単元が4時間かかるらしくてもう少しできるけど今日は終了。
・マークダウン
README.mdを書くのに使う記法。GitHubに載せると見やすいテーブルの形になる。
・READMEファイル
そのアプリの全体の仕様が書かれている説明書みたいなもの。テーブルの内容や繋がりが書かれたりする。
OneNoteを取り始めたのが勉強開始して1か月経ってからで、それ以前の内容が書かれてないせいか苦手意識が強い…
UbuntuとGitHubは特に、間違ったときの直し方がわからないから、どうしても いやだな~ と思ってしまう。
逆に、OneNoteに書ければ理解できるのでは とも思うから、必死に以前の内容振り返ったりしながら書いてるけど、その分やっぱり時間はかかっちゃう。
でもまぁ仕方ない! OneNoteに書ければ理解できる を信じて続けるしかない!
苦手こそ伸びる、伸ばそ。信じよ。
応用の最終章へ突入
4:35開始。
新しい章に入ると、またやる気と何をするのか楽しみで勉強捗る!
そして最終章だと何が理解できていて何が理解できていないかも洗い出せるし、ここで理解できることもあるし、何だかワクワクしちゃう。
・中間テーブル
多対多のテーブルの間に入るテーブル。2テーブルが1、中間テーブルが多の1対多の関係となって、各idの紐づけのみ行う。2テーブルのmodelに【has_many :中間テーブル】と【has_many :もう1つのテーブル, through: :中間テーブル】を書いて、中間テーブルのmodelには【belongs_to :テーブル1】【belongs_to :テーブル2】を書けば紐づけ完了。
ところで、Rubyドリルで配列に1,2,3が含まれるかを書いたプログラム。
上手く処理してくれるけど、引数に&&を使う書き方がネット検索でヒットしない。
この書き方って間違ってるのかな?
def array123(nums)
if nums.include?(1 && 2 && 3)
puts "True"
else
puts "False"
end
end
array123([1, 1, 2, 3, 1])