人生楽しんで反撃だ!

日々プログラミングで学んだことをアウトプットしたり、人生楽しむための考察をしたりします。

テックキャンプでパニック障害になりそうだった話

テックキャンプ受講48日目のアイコです!

昨日やっと最終課題であるフリマアプリの実装が終わりました。

自分を追い込むことでプログラミング学習に集中しようと「短期集中10週間コース」を選びましたが結果、病みました😅

今回はそのお話をしようと思います。

 

目次

パニック障害の初期症状がではじめる

・病んだ原因

・改善するためにやったこと

 

パニック障害の症状がではじめる 

テックキャンプ受講から3週間くらいからでした。

・吐き気

パソコンに向かいコードに向かうと酷い吐き気に襲われるようになりました。

胃に何も入っていないので吐くこともできないまま吐き気に襲われ、ただ胃液だけを吐いてました。

・激しい動機

朝4時くらいに激しい動悸で飛び起きるようになりました。

不安に襲われて心臓を握りしめられているような感覚に陥り息ができなくなる。

・手が汗ばむ

MacBookはマウスを使わずトラックパッドで操作しているのですが、そのトラックパッドが汗ばんだ手で滑りが悪くなること多々ありました。

 

病んだ原因

・前提

私は去年8月に長年務めた派遣先から突然、私だけが雇い止めになりました。

お客様にも親身で、営業成績も悪くなく知識にも自信がありました。

36才独身でこのままではダメだ、自分を変えたい、解雇した上司を見返したい。

そんな一心でテックキャンプの無料カウンセリングを受け受講することにしました。

初めから心身も自尊心もボロボロの状態でした。

・頑張っても理解が追いつかない学習内容

「プログラミングは難しい」という認識はありました。

なのにテックキャンプ受講まで一切の事前学習をしませんでした。

テックキャンプに入って初めて「Ruby」「Rails」という言葉を聞いたのです。

VSコードもスラックもシークエルプロも初めて使いました。

ちょっとHTML、CSSJavaをいじったことがあるど素人だったのです。

そうして初めたプログラミング学習は苦悩の連続でした。

 ・学習量が多さ

テックキャンプは朝10時に初まりまずドリルから始まります。

これがコードを書きなさい系の問題・・・😰

基礎もできていないのに書けるわけがない💦

問題を見て答えを見て覚えようと努力はするけど、カリュキュラムも同時並行で覚えなくてはいけない学習量が多すぎる!

その上進捗状況に終了目標何日までと記入があるので遅れてると一目瞭然ですごく焦ります。

・学習を急かされる

毎週ライフコーチと面談の中で「今週どこまで進んだか」「今週の課題」「それに対するアクションプラン」「来週どこまで学習を進めるかの目標」を決めます。

これが「ここまでやれば2日早く進められてます!」とか肯定的に詰められますw

かなりのプレッシャーがかかります。

・学習を進めてどんどん先に進んでいくチームメイト

私のチームは7人でした。

この中の5人は事前にpro gateなどをやっていたり、エンジニアの知り合いがいたりという方々でした。

かなり早い段階で進んでいきアウトプットで何の事を言っているのかわからない始末。

初めは追いついてやる!という気持ちでしたが離されすぎて気が滅入っていきました。

・1度目の挫折

1度目の挫折は2週間が終わった時にやる試験です。

これが中々受からず再々試験でやっと受かりました。

この時、難しすぎて無理かもしれない止めたいと思いましたが、テックキャンプ受講のためにMacBookを3ヶ月3万円でレンタルしてたし、こんな序盤で諦めるのか!?自分の覚悟はそんなものだったのか!?と思い踏みとどまりました。

この試験も2週間目の金曜日までに受からないと次に進めないという期日がありました。

土日仕事中に勉強をして実際受かったのは日曜日だった気がします。

・2度目の挫折

2度目はproto spaceというアプリの実装です。

手順はある程度書かれているけども、やり方は今までのカリュキュラムを検索して実装するタイプでした。

今まではほぼカリュキュラムのコピペでできていたのが引用になった事でレベルがかなり上がりました。

期日ギリギリになり答えが配布されたにも関わらず出来ず、期日より3日遅れて完成しました。

・3度目の挫折

3度目の挫折はラスボス最終課題フリマアプリです。

これもかなり苦戦しました。

特に最後のクレジットカードに実装は高難易度で、新しい機能2つを実装していくのでエラーの嵐!

赤い画面が表示されるたびに泣きそうでした。

・ホストだったことを忘れてた

テックキャンプは細かい時間割とアウトプットの時間があり、代表してzoomで部屋を立ち上げる人をホストと呼びます。

このホストは1日ごと交代制なのですが今日は誰々さんですとアナウスはなく順番にやるので何日が自分のホストの日かスケジュールに入れておりました。

「明日ホストの日だなぁ」と認識はあったのにホストだということをすっかり忘れて朝10時にスラックにズームのURLを投稿できませんでした。

(10:05くらいには投稿できたんですけどね)

この失敗が1日を狂わせました。

なんで覚えてたのに忘れた!みんなに迷惑をかけた!

自分はこんなこともできないダメなやつだ。

発達障害じゃないか?発達障害の病院受けた方がいいんじゃないか。

発達障害セルフチェック何度もやりはじめる。

もういっそ障害者として生きればいい。どうやったら障害者手帳もらえる?

とか考え始め、その日は1日学習どころではありませんでした。

・24ヶ月払いで合計80万円がかかっているというプレッシャー

私は貯金が無く派遣切りにあって悔しくて自分を変えたいと思う勢いでテックキャンプに申し込みをしました。

テックキャンプが開講するまでの2ヶ月間は節約をして2つの仕事を掛け持ちして、やっとの思いで貯金30万円を捻出しました。

(なので事前学習する時間がなかったと言い訳しておきます)

それでもギリギリまで受けるか悩んでたのですが、始めなきゃ始まらないと自分を追い込む覚悟を10月末に決めました。

・諦めれば無意味に80万円を月3万円づつ2年間払っていかないというプレッシャー

上記に記述したように何度も挫折しました。

2週間で止めれば全額返金でしたが、それでは意味がないと続けました。

挫折するたびに「80万円をドブに捨てたんだ」

「なんのスキルも身に付かずにこれから80万円を2年間払っていくんだ」

と布団の中で何度も自分を責めました。

・こんなことも理解できないのか自分はバカだと自分を責める毎日

私は専門学校卒業してますが、高校は願書を出せば受かるような馬鹿高校でした。

おまけに高校ですらない高等専修学校です。

昔から勉強が大っ嫌いで一度も受験をしたことがありません。

特に算数・数学は大嫌いです。成績はいつも最低でした。

馬鹿なのは自覚してたけど、ここまで馬鹿だったかと理解できない自分を蔑み自虐的になっていきました。

・プログラミングは向いていない、道を間違えたと自分を責める毎日

上記に書いたように数学が嫌いなゆえに計算式が苦手です。

しかもずっと美術系だったので完全なる文系。

youtubeでプログラミングが向いていない人と検索をするとほぼ当てはまっていて、どんどん落ち込んでいきました。

・減っていく拙い貯金、将来への不安

貯金は30万円です。

どう考えても3ヶ月間無職で大人1人と猫3匹は養えません。

家賃もクレジットカードの支払いも毎月あります。

なので土日は家電量販店のスマホ・ネット通信販売の仕事をしていました。

しかしフリマアプリに入ってから学習が遅れ仕事している場合ではなくなり、土日入ってた仕事を派遣会社に休みにできないか連絡をしました。

クリスマス後年末年始の商戦期だったので難しいと言われましたが「今はプログラミング学習に集中したい」とお願いしなんとか休ませてもらいました。

その後、派遣会社からは「今後今の時給での仕事紹介はできなくなる可能性がある」と脅されました。

私は時給1600円でしたし、このご時世に当たり前です。

ただかなり精神的にやられました。

・社会から隔離されてプログラミングコードにしか向かうことしかできない日々

土日していた仕事も休み、ただひたすらプログラミングと向き合う日々が続きました。

年末年始もずっとプログラミングコードを書いてました。

やりたくないと思ってもやるしかない毎日、かなり消耗していきます。

・期限までに終わらないと転職サポート・転職保証が消えるという事実

テックキャンプには転職保証というエンジニアに転職できなかったら全額返金という制度と、カリュキュラム終了後キャリアアドバイザーの面談を通して転職活動をサポートするという制度があります。

私たち89期生は1月15日15時までにフリマアプリが終われば転職保証対象

1月22日15時までにフリマアプリが終われば転職サポート対象となります。

終わらなかった場合は14日間38,390円、28日間76,780円で 延長できます。

すでに80万かかるのに更に払うなんて無理😱

この期限も追い込まれる原因の一つでした。

 

改善するためにやったこと

・早起き 

雇い止めにあった8月から朝5時に起きをするようにしました。

・毎日1時間のウォーキング

神社に参りをして家の近くの川沿いを野鳥を見ながら一時間歩くようにしました。

・瞑想

テックキャンプの朝礼に5分の瞑想がありますが、自主的に15分から20分ほど瞑想を始めました。

・悩みを書き出す

A4のコピー用紙にとにかく今の不安なことを書き出しました。

そしてすぐにできるものとできないものに分けて、解決策を追記しました。

・日の光を浴びる

庭先によく光が入るので庭先で日の光を浴びなががら瞑想をするようにしました。

・猫と多めに戯れる

3匹の猫と嫌がられない程度にコミュニケーションをふやしました😸

・辛いもいを吐き出して泣く

母に電話をし辛い思いを吐き出し大泣きして話を聞いてもらいました。

(お母さんありがとう)

・いろんな人に電話する

派遣会社の人、バイク仲間にとりあえず電話しまくり(笑)

ライン電話で顔を見ながら電話をしました。

・2月からの仕事を手配した

派遣会社の信用できる人に2月から仕事がないか連絡をしました。

すぐにコールセンターの仕事を勧めてくれました。

・転職サイトに登録をした

転職サイトに登録をし、書類選考を出したところ2社通過し面談のお時間をいただきました。

 

まとめ

そんなことで精神的にボロボロでしたが、逃げずにプログラミングと向かい合いなんとか最終課題フリマアプリを終わらせることができました。

これもテックキャンプのメンターさん、ライフコーチさん、キャリアアドバイザーさんのおかげです。

本当にありがとうございます。

まだほんの序章でつまづいてしまいましたが、これからが本番!

このテックキャンプの貴重な体験を無駄にしないように転職活動に活かしていきたいと思います。

ActiveHashの中身を表示したい場合

初歩中の初歩ですが書き留めておきます。

 

フリマアプリの商品一覧下部分に着払いor送料込みの表示をしたい。

 

item.pay.name

<span><%= item.price %><br><%= item.pay.name %></span>

「.」で記述することにより名前を取り出すことができる。

 

app/models/pay.rb

class Pay < ActiveHash::Base
self.data = [
{ id: 1, name: '--' },
{ id: 2, name: '着払い(購入者負担)' },
{ id: 3, name: '送料込み(出品者負担)' }
]

include ActiveHash::Associations
belongs_to :user
has_many :items

end

 

「:」とか「,」とか色々試したんだけど、なぜ「.」だけ試さなかった!!

もっと色々試そうと思いました。

Mysql2::Error::ConnectionErrorが出た時の対処方法

ヘロクでデプロイ後

We're sorry, but something went wrong.

上記エラーが発生。

解消方法を記録しておきます。

 

①ヘロクコマンド

/heroku logs --tail --app furima-32604

実行

 

②エラー文を確認

Mysql2::Error::ConnectionError

(Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)):

Mysqlと繋がっていなさそう

 

③もう一度マイグレートしてみるが改善できず

heroku run rails db:migrate

 

④heroku configを開く

CLEARDB_DATABASE_URL: mysql://bb8eed0703cee3:5400ea18@us-cdbr-east-02.cleardb.com/heroku_8365419459f7b8b?reconnect=true
LANG: en_US.UTF-8
RACK_ENV: production
RAILS_ENV: production
RAILS_LOG_TO_STDOUT: enabled
RAILS_SERVE_STATIC_FILES: enabled
SECRET_KEY_BASE: b85da40561f36ca3d46a9440b4d879c29a8770039105d8eeac286a5ae6f2ba767b638c90665ec73d47fdcf075ed8b1dea45bfaefb9f8bd54f5487e5459dadd0d

 

DATABASE_URL:がない!

 

⑤コマンド/

heroku config:set DATABASE_URL=mysql2${heroku_cleardb:5}

を実行

 

⑥もう一度heroku config

CLEARDB_DATABASE_URL: mysql://bb8eed0703cee3:5400ea18@us-cdbr-east-02.cleardb.com/heroku_8365419459f7b8b?reconnect=true
DATABASE_URL: mysql2
LANG: en_US.UTF-8
RACK_ENV: production
RAILS_ENV: production
RAILS_LOG_TO_STDOUT: enabled
RAILS_SERVE_STATIC_FILES: enabled
SECRET_KEY_BASE: b85da40561f36ca3d46a9440b4d879c29a8770039105d8eeac286a5ae6f2ba767b638c90665ec73d47fdcf075ed8b1dea45bfaefb9f8bd54f5487e5459dadd0d

 

データーベースできてる!

でもオレンジの部分に「2」がついていない

 

⑦コマンド実行

/heroku config:set DATABASE_URL='mysql2://bb8eed0703cee3:5400ea18@us-cdbr-east-02.cleardb.com/heroku_8365419459f7b8b?reconnect=true'

 

⑧コマンド

heroku config

=== furima-32604 Config Vars
CLEARDB_DATABASE_URL: mysql://bb8eed0703cee3:5400ea18@us-cdbr-east-02.cleardb.com/heroku_8365419459f7b8b?reconnect=true
DATABASE_URL: mysql2://bb8eed0703cee3:5400ea18@us-cdbr-east-02.cleardb.com/heroku_8365419459f7b8b?reconnect=true
LANG: en_US.UTF-8
RACK_ENV: production
RAILS_ENV: production
RAILS_LOG_TO_STDOUT: enabled
RAILS_SERVE_STATIC_FILES: enabled
SECRET_KEY_BASE: b85da40561f36ca3d46a9440b4d879c29a8770039105d8eeac286a5ae6f2ba767b638c90665ec73d47fdcf075ed8b1dea45bfaefb9f8bd54f5487e5459dadd0d

 

できてる!

 

⑨もう一度マイグレ実行

heroku run rails db:migrate

 

無事解消できました。

expected の[]の中身がない!

expected のの中身がない!

 

エラー文

1) Item アイテムの保存 アイテムが保存できない場合 ・・・imageが空では登録できない
Failure/Error: expect(@item.errors.full_messages).to include("Content can't be blank")
expected to include "Content can't be blank"
# ./spec/models/item_spec.rb:19:in `block (4 levels) in <top (required)>'

 

 

初歩中の初歩orz

バリデーションがありませんでした。

 

spec/models/item_spec.rb

require 'rails_helper'

RSpec.describe Item, type: :model do
before do
@item = FactoryBot.build(:item)
end
 
describe 'アイテムの保存' do
context "アイテムが保存できる場合" do
it "全ての情報が存在すれば登録できる" do
expect(@item).to be_valid
end
end
 
context "アイテムが保存できない場合" do
 
・・・・・・エラーが出ている部分・・・・・・
it "・・・imageが空では登録できない" do
@item.image = nil
@item.valid?
expect(@item.errors.full_messages).to include("Image can't be blank")
end
・・・・・・エラーが出ている部分・・・・・・
 
it "nameが空だとアイテムは保存できない" do
@item.name = ""
@item.valid?
expect(@item.errors.full_messages).to include("Name can't be blank")
end

it "商品の説明がないとアイテムは保存できない" do
@item.text = ""
@item.valid?
expect(@item.errors.full_messages).to include("Text can't be blank")
end

it "カテゴリーの情報がないとアイテムは保存できない" do
@item.category_id = nil
@item.valid?
expect(@item.errors.full_messages).to include("Category is not a number")
end
it "・・・カテゴリーの情報は1以外でないと登録できない" do
@item.category_id = 1
@item.valid?
expect(@item.errors.full_messages).to include("Category must be other than 1")
end



it "商品の状態の情報がないとアイテムは保存できない" do
@item.condition_id = nil
@item.valid?
expect(@item.errors.full_messages).to include("Condition is not a number")
end



it "・・・商品の状態の情報は1以外でないと登録できない" do
@item.condition_id = 1
@item.valid?
expect(@item.errors.full_messages).to include("Condition must be other than 1")
end
 
it "配送料の負担の情報がないとアイテムは保存できない" do
@item.pay_id = nil
@item.valid?
expect(@item.errors.full_messages).to include("Pay is not a number")
end
it "・・・配送料の負担の情報は1以外でないと登録できない" do
@item.pay_id = 1
@item.valid?
expect(@item.errors.full_messages).to include("Pay must be other than 1")
end
it "発送元の地域の情報がないとアイテムは保存できない" do
@item.area_id = nil
@item.valid?
expect(@item.errors.full_messages).to include("Area is not a number")
end
it "・・・発送元の地域の情報は1以外でないと登録できない" do
@item.area_id = 1
@item.valid?
expect(@item.errors.full_messages).to include("Area must be other than 1")
end

it "発送までの日数の情報がないとアイテムは保存できない" do
@item.day_id = nil
@item.valid?
expect(@item.errors.full_messages).to include("Day is not a number")
end
it "・・・発送までの日数は1以外でないと登録できない" do
@item.day_id = 1
@item.valid?
expect(@item.errors.full_messages).to include("Day must be other than 1")
end

it "価格の情報がないとアイテムは保存できない" do
@item.price = ""
@item.valid?
expect(@item.errors.full_messages).to include("Price is not a number")
end
it "価格が299円以下だと出品できない" do
@item.price = 1
@item.valid?
expect(@item.errors.full_messages).to include("Price must be greater than or equal to 300")
end
it "価格が10000000円以上だと出品できない" do
@item.price = 10000001
@item.valid?
expect(@item.errors.full_messages).to include("Price must be less than or equal to 9999999")
end
it "価格が全角文字では登録できないこと" do
@item.price = "てすと"
@item.valid?
expect(@item.errors.full_messages).to include("Price is not a number")
end
it "価格が半角英語だけでは登録できないこと" do
@item.price = "てすと"
@item.valid?
expect(@item.errors.full_messages).to include("Price is not a number")
end
it "価格が半角英数混合では登録できないこと" do
@item.price = "てすと"
@item.valid?
expect(@item.errors.full_messages).to include("Price is not a number")
end
end
end
end

 

app/models/item.rb

class Item < ApplicationRecord
extend ActiveHash::Associations::ActiveRecordExtensions
belongs_to :user
has_one_attached :image
belongs_to :category
belongs_to :condition
belongs_to :pay
belongs_to :area
belongs_to :day
 
with_options presence: true do
validates :name
validates :text
validates :image ←バリデーションを追加
end

with_options numericality: { other_than: 1 }do
validates :category_id
validates :condition_id
validates :pay_id
validates :area_id
validates :day_id
end

validates :price, numericality: {only_integer: true, greater_than_or_equal_to: 300, less_than_or_equal_to: 9999999}
end

 

エラー文

1) Item アイテムの保存 アイテムが保存できない場合 ・・・imageが空では登録できない
Failure/Error: expect(@item.errors.full_messages).to include("Content can't be blank")
expected ["Image can't be blank"] to include "Content can't be blank"
# ./spec/models/item_spec.rb:19:in `block (4 levels) in <top (required)>'

 

ちゃんと expected ["Image can't be blank"] って言ってくれました!!

 

`attach' が使えないよと怒られた話

フリマアプリに大苦戦してるヲキヨです。

テストコード地獄から抜け出したい!!

しかしプルリクエストを送ると

「example6追加してください^^」

鬼ですか!!!www

テックキャンプの人はドSなんじゃないかと思えてきた・・・・(まぁあの社長だからな・・・・)

テストコードを実行すると出てくるエラー

-----------------------------------------------

1) Item アイテムの保存 アイテムが保存できる場合 全ての情報が存在すれば登録できる
Failure/Error: item.image.attach(io: File.open('public/images/test_image.png'), filename: 'test_image.png')

NoMethodError:
undefined method `attach' for nil:NilClass
# ./spec/factories/items.rb:15:in `block (3 levels) in <main>'
# ./spec/models/item_spec.rb:5:in `block (2 levels) in <top (required)>'

-----------------------------------------------

`attach'が使えない。

結論から言うとimageのアソシエーションにbelongs_toを使っているからでした。

imageはActiveStorageで管理されているためアソシエーションはhas_one_attached

にしなければいけないとのことでした。

 

app/modes/item.rb

 
class Item < ApplicationRecord
extend ActiveHash::Associations::ActiveRecordExtensions
belongs_to :user
belongs_to :image ←ここがbelongs_toになっている
belongs_to :category
belongs_to :condition
belongs_to :pay
belongs_to :area
belongs_to :day
 
with_options presence: true do
validates :name, presence: true
validates :text, presence: true
validates :category_id
validates :condition_id
validates :pay_id
validates :area_id
validates :day_id
validates :price, numericality: {only_integer: true, greater_than_or_equal_to: 300, less_than_or_equal_to: 9999999}
end
end

imageのアソシエーションにbelongs_toを使っている

 

spec/factory/items.rb

 
FactoryBot.define do

factory :item do
name {Faker::Name.name}
text {"1234"}
category_id {2}
condition_id {2}
pay_id {2}
area_id {2}
day_id {2}
price{1111111}
association :user

after(:build) do |item|
item.image.attach(io: File.open('public/images/test_image.png'), filename: 'test_image.png')
end
end
end
 

imageを関連づけているattachが使えないと言われる。

 

メンターさんでも少し考えるくらい珍しいエラーでした。

(それくらいの凡ミスってことorz)

 

spec/modes/item_spec.rb

require 'rails_helper'

RSpec.describe Item, type: :model do
before do
@item = FactoryBot.build(:item)
end
 
describe 'アイテムの保存' do
context "アイテムが保存できる場合" do
it "全ての情報が存在すれば登録できる" do
expect(@item).to be_valid
end
end
 
context "アイテムが保存できない場合" do
it "・・・imageが空では登録できない" do
@item.name = ""
@item.valid?
expect(@item.errors.full_messages).to include("Name can't be blank")
end
it "nameが空だとアイテムは保存できない" do
@item.name = ""
@item.valid?
expect(@item.errors.full_messages).to include("Name can't be blank")
end

it "商品の説明がないとアイテムは保存できない" do
@item.text = ""
@item.valid?
expect(@item.errors.full_messages).to include("Text can't be blank")
end

it "カテゴリーの情報がないとアイテムは保存できない" do
@item.category_id = ""
@item.valid?
expect(@item.errors.full_messages).to include("Category can't be blank")
end
it "・・・カテゴリーの情報は1以外でないと登録できない" do
@item.category_id = ""
@item.valid?
expect(@item.errors.full_messages).to include("Category can't be blank")
end

it "商品の状態の情報がないとアイテムは保存できない" do
@item.condition_id = ""
@item.valid?
expect(@item.errors.full_messages).to include("Condition can't be blank")
end
it "・・・商品の状態の情報は1以外でないと登録できない" do
@item.condition_id = ""
@item.valid?
expect(@item.errors.full_messages).to include("Condition can't be blank")
end
 
it "配送料の負担の情報がないとアイテムは保存できない" do
@item.pay_id = ""
@item.valid?
expect(@item.errors.full_messages).to include("Pay can't be blank")
end
it "・・・配送料の負担の情報は1以外でないと登録できない" do
@item.pay_id = ""
@item.valid?
expect(@item.errors.full_messages).to include("Pay can't be blank")
end
it "発送元の地域の情報がないとアイテムは保存できない" do
@item.area_id = ""
@item.valid?
expect(@item.errors.full_messages).to include("Area can't be blank")
end
it "・・・発送元の地域の情報は1以外でないと登録できない" do
@item.area_id = ""
@item.valid?
expect(@item.errors.full_messages).to include("Area can't be blank")
end

it "発送までの日数の情報がないとアイテムは保存できない" do
@item.day_id = ""
@item.valid?
expect(@item.errors.full_messages).to include("Day can't be blank")
end
it "・・・発送までの日数は1以外でないと登録できない" do
@item.day_id = ""
@item.valid?
expect(@item.errors.full_messages).to include("Day can't be blank")
end

it "価格の情報がないとアイテムは保存できない" do
@item.price = ""
@item.valid?
expect(@item.errors.full_messages).to include("Price can't be blank")
end
it "価格の範囲がの¥300~¥9,999,999の間でないとアイテムは保存できない" do
@item.price = "1"
@item.valid?
expect(@item.errors.full_messages).to include("Price must be greater than or equal to 300")
end
it "価格が299円以下だと出品できない" do
@item.price = "1"
@item.valid?
expect(@item.errors.full_messages).to include("Price must be greater than or equal to 300")
end
it "価格が10000000円以上だと出品できない" do
@item.price = "10000001"
@item.valid?
expect(@item.errors.full_messages).to include("Price must be less than or equal to 9999999")
end
it "価格は半角数字のみでないとアイテムは保存できない" do
@item.price = "てすと"
@item.valid?
expect(@item.errors.full_messages).to include("Price is not a number")
end
end
end
end

 

エラー文全文

Item
アイテムの保存
アイテムが保存できる場合
全ての情報が存在すれば登録できる (FAILED - 1)
アイテムが保存できない場合
・・・imageが空では登録できない (FAILED - 2)
nameが空だとアイテムは保存できない (FAILED - 3)
商品の説明がないとアイテムは保存できない (FAILED - 4)
カテゴリーの情報がないとアイテムは保存できない (FAILED - 5)
・・・カテゴリーの情報は1以外でないと登録できない (FAILED - 6)
商品の状態の情報がないとアイテムは保存できない (FAILED - 7)
・・・商品の状態の情報は1以外でないと登録できない (FAILED - 8)
配送料の負担の情報がないとアイテムは保存できない (FAILED - 9)
・・・配送料の負担の情報は1以外でないと登録できない (FAILED - 10)
発送元の地域の情報がないとアイテムは保存できない (FAILED - 11)
・・・発送元の地域の情報は1以外でないと登録できない (FAILED - 12)
発送までの日数の情報がないとアイテムは保存できない (FAILED - 13)
・・・発送までの日数は1以外でないと登録できない (FAILED - 14)
価格の情報がないとアイテムは保存できない (FAILED - 15)
価格の範囲がの¥300~¥9,999,999の間でないとアイテムは保存できない (FAILED - 16)
価格が299円以下だと出品できない (FAILED - 17)
価格が10000000円以上だと出品できない (FAILED - 18)
価格は半角数字のみでないとアイテムは保存できない (FAILED - 19)

Failures:

1) Item アイテムの保存 アイテムが保存できる場合 全ての情報が存在すれば登録できる
Failure/Error: item.image.attach(io: File.open('public/images/test_image.png'), filename: 'test_image.png')

NoMethodError:
undefined method `attach' for nil:NilClass
# ./spec/factories/items.rb:15:in `block (3 levels) in <main>'
# ./spec/models/item_spec.rb:5:in `block (2 levels) in <top (required)>'

2) Item アイテムの保存 アイテムが保存できない場合 ・・・imageが空では登録できない
Failure/Error: item.image.attach(io: File.open('public/images/test_image.png'), filename: 'test_image.png')

NoMethodError:
undefined method `attach' for nil:NilClass
# ./spec/factories/items.rb:15:in `block (3 levels) in <main>'
# ./spec/models/item_spec.rb:5:in `block (2 levels) in <top (required)>'

3) Item アイテムの保存 アイテムが保存できない場合 nameが空だとアイテムは保存できない
Failure/Error: item.image.attach(io: File.open('public/images/test_image.png'), filename: 'test_image.png')

NoMethodError:
undefined method `attach' for nil:NilClass
# ./spec/factories/items.rb:15:in `block (3 levels) in <main>'
# ./spec/models/item_spec.rb:5:in `block (2 levels) in <top (required)>'

4) Item アイテムの保存 アイテムが保存できない場合 商品の説明がないとアイテムは保存できない
Failure/Error: item.image.attach(io: File.open('public/images/test_image.png'), filename: 'test_image.png')

NoMethodError:
undefined method `attach' for nil:NilClass
# ./spec/factories/items.rb:15:in `block (3 levels) in <main>'
# ./spec/models/item_spec.rb:5:in `block (2 levels) in <top (required)>'

5) Item アイテムの保存 アイテムが保存できない場合 カテゴリーの情報がないとアイテムは保存できない
Failure/Error: item.image.attach(io: File.open('public/images/test_image.png'), filename: 'test_image.png')

NoMethodError:
undefined method `attach' for nil:NilClass
# ./spec/factories/items.rb:15:in `block (3 levels) in <main>'
# ./spec/models/item_spec.rb:5:in `block (2 levels) in <top (required)>'

6) Item アイテムの保存 アイテムが保存できない場合 ・・・カテゴリーの情報は1以外でないと登録できない
Failure/Error: item.image.attach(io: File.open('public/images/test_image.png'), filename: 'test_image.png')

NoMethodError:
undefined method `attach' for nil:NilClass
# ./spec/factories/items.rb:15:in `block (3 levels) in <main>'
# ./spec/models/item_spec.rb:5:in `block (2 levels) in <top (required)>'

7) Item アイテムの保存 アイテムが保存できない場合 商品の状態の情報がないとアイテムは保存できない
Failure/Error: item.image.attach(io: File.open('public/images/test_image.png'), filename: 'test_image.png')

NoMethodError:
undefined method `attach' for nil:NilClass
# ./spec/factories/items.rb:15:in `block (3 levels) in <main>'
# ./spec/models/item_spec.rb:5:in `block (2 levels) in <top (required)>'

8) Item アイテムの保存 アイテムが保存できない場合 ・・・商品の状態の情報は1以外でないと登録できない
Failure/Error: item.image.attach(io: File.open('public/images/test_image.png'), filename: 'test_image.png')

NoMethodError:
undefined method `attach' for nil:NilClass
# ./spec/factories/items.rb:15:in `block (3 levels) in <main>'
# ./spec/models/item_spec.rb:5:in `block (2 levels) in <top (required)>'

9) Item アイテムの保存 アイテムが保存できない場合 配送料の負担の情報がないとアイテムは保存できない
Failure/Error: item.image.attach(io: File.open('public/images/test_image.png'), filename: 'test_image.png')

NoMethodError:
undefined method `attach' for nil:NilClass
# ./spec/factories/items.rb:15:in `block (3 levels) in <main>'
# ./spec/models/item_spec.rb:5:in `block (2 levels) in <top (required)>'

10) Item アイテムの保存 アイテムが保存できない場合 ・・・配送料の負担の情報は1以外でないと登録できない
Failure/Error: item.image.attach(io: File.open('public/images/test_image.png'), filename: 'test_image.png')

NoMethodError:
undefined method `attach' for nil:NilClass
# ./spec/factories/items.rb:15:in `block (3 levels) in <main>'
# ./spec/models/item_spec.rb:5:in `block (2 levels) in <top (required)>'

11) Item アイテムの保存 アイテムが保存できない場合 発送元の地域の情報がないとアイテムは保存できない
Failure/Error: item.image.attach(io: File.open('public/images/test_image.png'), filename: 'test_image.png')

NoMethodError:
undefined method `attach' for nil:NilClass
# ./spec/factories/items.rb:15:in `block (3 levels) in <main>'
# ./spec/models/item_spec.rb:5:in `block (2 levels) in <top (required)>'

12) Item アイテムの保存 アイテムが保存できない場合 ・・・発送元の地域の情報は1以外でないと登録できない
Failure/Error: item.image.attach(io: File.open('public/images/test_image.png'), filename: 'test_image.png')

NoMethodError:
undefined method `attach' for nil:NilClass
# ./spec/factories/items.rb:15:in `block (3 levels) in <main>'
# ./spec/models/item_spec.rb:5:in `block (2 levels) in <top (required)>'

13) Item アイテムの保存 アイテムが保存できない場合 発送までの日数の情報がないとアイテムは保存できない
Failure/Error: item.image.attach(io: File.open('public/images/test_image.png'), filename: 'test_image.png')

NoMethodError:
undefined method `attach' for nil:NilClass
# ./spec/factories/items.rb:15:in `block (3 levels) in <main>'
# ./spec/models/item_spec.rb:5:in `block (2 levels) in <top (required)>'

14) Item アイテムの保存 アイテムが保存できない場合 ・・・発送までの日数は1以外でないと登録できない
Failure/Error: item.image.attach(io: File.open('public/images/test_image.png'), filename: 'test_image.png')

NoMethodError:
undefined method `attach' for nil:NilClass
# ./spec/factories/items.rb:15:in `block (3 levels) in <main>'
# ./spec/models/item_spec.rb:5:in `block (2 levels) in <top (required)>'

15) Item アイテムの保存 アイテムが保存できない場合 価格の情報がないとアイテムは保存できない
Failure/Error: item.image.attach(io: File.open('public/images/test_image.png'), filename: 'test_image.png')

NoMethodError:
undefined method `attach' for nil:NilClass
# ./spec/factories/items.rb:15:in `block (3 levels) in <main>'
# ./spec/models/item_spec.rb:5:in `block (2 levels) in <top (required)>'

16) Item アイテムの保存 アイテムが保存できない場合 価格の範囲がの¥300~¥9,999,999の間でないとアイテムは保存できない
Failure/Error: item.image.attach(io: File.open('public/images/test_image.png'), filename: 'test_image.png')

NoMethodError:
undefined method `attach' for nil:NilClass
# ./spec/factories/items.rb:15:in `block (3 levels) in <main>'
# ./spec/models/item_spec.rb:5:in `block (2 levels) in <top (required)>'

17) Item アイテムの保存 アイテムが保存できない場合 価格が299円以下だと出品できない
Failure/Error: item.image.attach(io: File.open('public/images/test_image.png'), filename: 'test_image.png')

NoMethodError:
undefined method `attach' for nil:NilClass
# ./spec/factories/items.rb:15:in `block (3 levels) in <main>'
# ./spec/models/item_spec.rb:5:in `block (2 levels) in <top (required)>'

18) Item アイテムの保存 アイテムが保存できない場合 価格が10000000円以上だと出品できない
Failure/Error: item.image.attach(io: File.open('public/images/test_image.png'), filename: 'test_image.png')

NoMethodError:
undefined method `attach' for nil:NilClass
# ./spec/factories/items.rb:15:in `block (3 levels) in <main>'
# ./spec/models/item_spec.rb:5:in `block (2 levels) in <top (required)>'

19) Item アイテムの保存 アイテムが保存できない場合 価格は半角数字のみでないとアイテムは保存できない
Failure/Error: item.image.attach(io: File.open('public/images/test_image.png'), filename: 'test_image.png')

NoMethodError:
undefined method `attach' for nil:NilClass
# ./spec/factories/items.rb:15:in `block (3 levels) in <main>'
# ./spec/models/item_spec.rb:5:in `block (2 levels) in <top (required)>'

Finished in 0.52755 seconds (files took 5.33 seconds to load)
19 examples, 19 failures

Failed examples:

rspec ./spec/models/item_spec.rb:10 # Item アイテムの保存 アイテムが保存できる場合 全ての情報が存在すれば登録できる
rspec ./spec/models/item_spec.rb:16 # Item アイテムの保存 アイテムが保存できない場合 ・・・imageが空では登録できない
rspec ./spec/models/item_spec.rb:21 # Item アイテムの保存 アイテムが保存できない場合 nameが空だとアイテムは保存できない
rspec ./spec/models/item_spec.rb:27 # Item アイテムの保存 アイテムが保存できない場合 商品の説明がないとアイテムは保存できない
rspec ./spec/models/item_spec.rb:33 # Item アイテムの保存 アイテムが保存できない場合 カテゴリーの情報がないとアイテムは保存できない
rspec ./spec/models/item_spec.rb:38 # Item アイテムの保存 アイテムが保存できない場合 ・・・カテゴリーの情報は1以外でないと登録できない
rspec ./spec/models/item_spec.rb:44 # Item アイテムの保存 アイテムが保存できない場合 商品の状態の情報がないとアイテムは保存できない
rspec ./spec/models/item_spec.rb:49 # Item アイテムの保存 アイテムが保存できない場合 ・・・商品の状態の情報は1以外でないと登録できない
rspec ./spec/models/item_spec.rb:55 # Item アイテムの保存 アイテムが保存できない場合 配送料の負担の情報がないとアイテムは保存できない
rspec ./spec/models/item_spec.rb:60 # Item アイテムの保存 アイテムが保存できない場合 ・・・配送料の負担の情報は1以外でないと登録できない
rspec ./spec/models/item_spec.rb:65 # Item アイテムの保存 アイテムが保存できない場合 発送元の地域の情報がないとアイテムは保存できない
rspec ./spec/models/item_spec.rb:70 # Item アイテムの保存 アイテムが保存できない場合 ・・・発送元の地域の情報は1以外でないと登録できない
rspec ./spec/models/item_spec.rb:76 # Item アイテムの保存 アイテムが保存できない場合 発送までの日数の情報がないとアイテムは保存できない
rspec ./spec/models/item_spec.rb:81 # Item アイテムの保存 アイテムが保存できない場合 ・・・発送までの日数は1以外でないと登録できない
rspec ./spec/models/item_spec.rb:87 # Item アイテムの保存 アイテムが保存できない場合 価格の情報がないとアイテムは保存できない
rspec ./spec/models/item_spec.rb:92 # Item アイテムの保存 アイテムが保存できない場合 価格の範囲がの¥300~¥9,999,999の間でないとアイテムは保存できない
rspec ./spec/models/item_spec.rb:97 # Item アイテムの保存 アイテムが保存できない場合 価格が299円以下だと出品できない
rspec ./spec/models/item_spec.rb:102 # Item アイテムの保存 アイテムが保存できない場合 価格が10000000円以上だと出品できない
rspec ./spec/models/item_spec.rb:107 # Item アイテムの保存 アイテムが保存できない場合 価格は半角数字のみでないとアイテムは保存できない

wdayメソッドを使い日付に曜日を取得する方法

指定した曜日を取得する方法を学んだのでまとめます。


wdayは曜日を0(日曜日)~6(土曜日)の戻り値(整数)で取得します。

wdays = ['(日)','(月)','(火)','(水)','(木)','(金)','(土)']

0:日曜日、1:月曜日、2:火曜日、3:水曜日、4:木曜日、5:金曜日、6:土曜日

 

days = { :month => (@todays_date + x).month, :date => (@todays_date + x).day, :plans => today_plans, :wday => wdays[wday_num] }

:wday => wdays[wday_num]と記述し以下のコードを呼び出します。

 

7.times do |x|
today_plans = []
plans.each do |plan|
today_plans.push(plan.plan) if plan.date == @todays_date + x
end

wday_num = Date.today.wday + x 今日の曜日のwdayを呼び出す。timesメソッドのxと連結
if wday_num >= 7 7で繰り返す
wday_num = wday_num -7
end

irbで細かい動きを確認する